問題タブ [stdset]
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++ - 不変条件に影響を与えないセットの非定数イテレータを介してメンバーにアクセスする
次のようなコードがあるとしましょう:
MoreFields を記述しても不変条件に影響を与えないこと、またはセット内の要素の順序を無効にするようなことをしないことをコンパイラに保証するにはどうすればよいですか?
ベクトルなどの別のコンテナーを使用することが唯一の手段である場合、既に存在するかどうかを確認しながら、並べ替えられた位置に新しい値を挿入するにはどうすればよいですか?
c++ - std::setの同じ「値」はどういう意味ですか?
C++ では、std::set::insert() は、同じ「値」を持つ値がまだ存在しない場合にのみ、値を挿入します。同様に、これは operator== を意味するのでしょうか、それとも operator< がいずれかの順序付けで false であるものを意味するのでしょうか、それとも何か他のことを意味するのでしょうか?
c++ - キーが値の一部である場合、マップまたはセットを使用する必要がありますか?
C ++には、。という名前で並べ替えられたクラスがありstd::string
ます。std::map
aまたは。のいずれかで一意の名前ごとに1つだけにしたいstd::set
。
std::set
インスタンスを名前で並べ替えるので、を使用できますがoperator<
、インスタンスをその名前で検索する必要があります。キーが名前であるマップを使用するのは簡単ですが、セットを使用して、検索したい名前でクラスのダミーインスタンスを作成し、指定されたクラスの実際のインスタンスをセット内で見つけることもできます。名前。
コードを単純にするためにマップを使用する必要があると思いますが、キーは事実上オブジェクトの一部であり、冗長性を回避するため、セットを使用する方法があるのではないかと思います。
セットを使用して、キーでオブジェクトをクリーンな方法で見つけることができる方法はありますか、それともマップを使用してそれで済ます必要がありますか?
これが(ドラフト形式で)挿入されるクラスであり、各ディレクトリには、ノードの名前からキーオフされたノードのセットまたはマップがあります。
c++ - std::set を std::map に入れる方法
以下の std: map を宣言しました。
しかし、次のような多くのエラーがあります。
エラー 16 エラー C2676: バイナリ '<': 'const std::string' は、この演算子または事前定義された演算子 c: \program files (x86)\microsoft Visual Studio 10.0\vc\include に受け入れられる型への変換を定義していません\x機能
私は何を間違っていますか?
c++ - C ++ std::mapまたはstd::set-重複を効率的に挿入します
重複したデータがたくさんあるので、重複を排除したいと思います。たとえば、[1、1、3、5、5、5、7]は[1、3、5、7]になります。
std::mapまたはstd::setのいずれかを使用してこれを処理できるようです。ただし、(a)すべての値をコンテナーに挿入する方が速いのか、(b)コンテナーに既に存在するかどうかを確認し、存在しない場合にのみ挿入する方が速いかどうかはわかりません-挿入は非常に効率的ですか?より良い方法があるとしても...これを行うための迅速な方法を提案できますか?
別の質問-私がそれらに保存しているデータが整数ほど些細なものではなく、代わりにカスタムクラスである場合、std :: mapはどのようにしてデータを適切に保存(ハッシュ)して、operator [を介して高速アクセスできるようにしますか? ]?
vector - C++ でのベクトルの一意性
これは、重複しない任意のデータを std::set に格納する最も効率的な方法を知りたいという以前の質問のフォローアップです。
答えは、カスタムクラスの場合、 operator< を実装する必要があることを指摘してくれました(私が正しく理解していれば)。
ただし、私の特定のデータ型はベクトルです (数学的な意味で)。私がやりたいことは、まだ存在しない場合にのみ、新しいベクターをセットに格納することです。そのために、2 つのベクトルの間に以下演算子を実装するにはどうすればよいでしょうか? 比較する3つの直交次元がある場合、意味がないようです。これを行うためにどのような戦略を使用できますか?
c++ - イテレータC++なしでstd::setを検索する
私std::set
は来るint
値を含むものを持っています。今、私はイテレータを使用して、set
contansかどうかを調べvalue
ます。
しかし、私のアプリケーションはこの検索を非常に頻繁に使用し、イテレータを使用した検索は遅すぎます。次のようなことを実行できますか?
しかし、G++を使用してコンパイルするとエラーが発生します
'fdsockets[fd]'の'operator[]'に一致しません
多分私は代わりに何かを使うことができますstd::set
か?
ありがとう!
c++ - 2 つの STL セットの交点を見つける方法は?
C++ で 2 つの std::set の共通点を見つけようとしましたが、エラーが発生し続けます。
このための小さなサンプルテストを作成しました
後者のプログラムは出力を生成しませんがs3
、次の値を持つ新しいセット (と呼びましょう)があることを期待しています。
代わりに、次のエラーが表示されます。
このエラーから私が理解しているのは、パラメーターとしてset_intersection
受け入れる定義がないということです。Rb_tree_const_iterator<int>
さらに、std::set.begin()
メソッドはそのような型のオブジェクトを返すと思いますが、
std::set
C++で 2 つの交点を見つけるより良い方法はありますか? できれば組み込み関数?
c++ - std::set で C++ インスタンス化された here エラー
「ここからインスタンス化された」問題に関するスレッドがたくさん見つかりました。彼らはすべて、デフォルトのコンストラクタを忘れて作成した人々のようでした。私の問題は違うと思います (ただし、私は C++ に不慣れで、同じ問題のわずかなバリエーションである可能性があり、解決策を実装する方法がわかりません)。
セットに挿入しようとしていますが、そこからインスタンス化されているようです。そして、それはエラーを投げています。
どんな助けでも大歓迎です。
stl - 配列がソートされたままになるように、ソートされた配列に要素を挿入する方法は?
std::set
要素をソートされた順序で格納するc++ では、 O(log n) 時間で要素を挿入できます。しかし、私が知っているすべての方法は線形時間がかかります:
配列の最後に要素を挿入し、前の要素がそれよりも小さくなるまで前の要素と交換するには、線形時間がかかります。
配列でバイナリ検索を使用して、挿入する要素の位置を見つける: O(log n) 時間かかりますが、指定された位置に要素を挿入するには、最悪の場合 O(n) 時間がかかります。
ソートされた配列をヒープとして使用すると、O(log n) 時間で要素を挿入できますが、その後配列がヒープのままであっても、ソートされたままであるという保証はありません。
O(log n)時間でソートされた配列に要素を挿入する方法が必要です。これが可能であることはわかってstd::set
いますが、方法はわかりません。