問題タブ [equal-range]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 等範囲「イテレータ」の実装方法
どのようにジェネリックを実装しますか (別名、マルチマップ、ソートされたベクトルで機能します...) 等範囲イテレータ? これは、イテレーターのペアであるイテレーターであることを意味します (特定の equal_range の開始と終了)
この動機は、 sortedword2word と呼ばれるマルチマップがあり、それを使用して文字列の配列内のアナグラムを検出することです。したがって、等しい範囲ごとに簡単に反復する方法が必要です(LOC /読みやすさのように簡単に-.end()を手動でチェックすることで簡単に実行でき、次が現在と同じである場合... )
ブーストがこのような機能を実装している場合、それも許容されます。
c++ - boost::multi_index_container - equal_range 値
ブースト プロセス間ライブラリとマップを使用していくつかのソリューションを試し、現在は共有メモリ内の multi_index_container を使用しています。multi_index_container では、equal_range から返された値を反復処理する以外に方法はありますか。non_unique インデックス (ST0012345 などのステーション名) から結果のサブセットを取得し、必要な実際の測定タイプ (温度など) を見つけて取得したいと考えていました。
測定値をデータ ヒストリアンに挿入するには、測定ポイントの一意の pointID 値 (例: ST0012345SMD10000456.VoltsA = pointID - 45789) を取得する必要があります。メッセージペイロードには配列内の1つのステーションの〜100〜200の測定値が含まれているため、multi_index_containerのアイデアが好きだったので、500,000以上のアイテムを含む共有メモリコンテナを1回呼び出して、長い一意の文字列名を使用した、はるかに小さなリスト。
私が行った読み取りから、get/find を実行するのではなく、multi_index_container から返された小さなリストを反復処理することしかできないようです。
その場合、元の共有メモリ マップ ソリューション (私が取り組んでいる) に固執するほうがよいでしょうか。これには、データ ヒストリアンが必要とするポイント ID を取得するために照合する 500,000 個以上の長い文字列が含まれています。1 秒あたり 200 ポイントが処理される高いデータ レートがあります (テスト環境では、データ マップ ルックアップが 1 秒あたり 2000 ルックアップに達することがわかりました)。
また、マップを使用する場合、共有メモリに複数のマップがあることに害はありますか。たとえば、シドニー駅のマップ (~300,000 ポイント)、ニューカッスル駅のマップ (~200,000 ポイント) などです。
以下は、multi_index_container を作成した別のプロセスからアイテムを取得する私のプログラムのコードです。
}
c++ - equal_range と 2 つのオーバーロードには、「this」ポインターの有効な変換がありません
これがこの簡単なコードです
コンパイルされず、次のエラーが発生します
このエラーに関する多くのトピックを見てきましたが、これはconst
問題のようです。に変換すると、正常にコンパイルfoo(const int* bar)
されfoo(int* bar)
ます。
foo
問題は、コンテンツが MyMap オブジェクトに何かを変更する方法がわからないことです。std::multimap
の const バージョンを提案しequal_range
ます:
http://www.cplusplus.com/reference/map/multimap/equal_range/
私の問題は何ですか?
ありがとうございました
c++ - std::equal_range は、operator< が定義されている構造体では機能しません
以下の構造で使用しようとしていますstd::equal_range
が、コンパイルエラーが発生しましたerror: no match for ‘operator<’
。
私はテンプレートの実装を調べましたが、失敗しているのは、*it
MyFoo のオブジェクトを指しているイテレータを deferenging している次の場所で、 val_
10 です。
なぜ機能しないのですか?定義されていないグローバルを呼び出そうとしているのoperator<
ではないかと思ったのですが、クラスメンバとして定義したので問題ありませんね。
c++ - equal_range はどのように機能するはずですか?
このコードが印刷されない理由がわかりません。多くのserver.urlエントリが存在する可能性があるため、 を使用してそれらにアクセスしようとしていましたequal_range
。
c++ - equal_range イテレータの消去
私はイテレータのペアを持っています:
そのペアは、MultiMap で重複した要素を保持します。たとえば、さらに 2 つの重複 (基本的には 3 つのオブジェクト) を持つ 1 つのオブジェクトがあり、そのうちの 2 つを削除する必要があるため、1 つだけが残ります。
次のように、単純な while ループでこれを行っていました。
その後、私の目標である 1 つのオブジェクトだけが残りました。後で、1 回の関数呼び出しでペア全体を消去しようとする必要があり、次のようにループが必要ないことがわかりました。
これはよりクリーンに見えますが、問題はすべてのオブジェクトが削除されることです。
それから私は試しました:
これは最初のオブジェクトを残して残りを削除するように見えるので、私にとってはうまくいきますが、私の質問は、これは正しい方法ですか、私が探しているものですか?