問題タブ [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.

0 投票する
0 に答える
42 参照

c++ - ヒントを使用して std::set に繰り返し insert() する方法は?

cplusplus.comによるとstd::set::insert()、項目を挿入する場所のヒント イテレータを取るオーバーロードが C++98 から C++11 に変更されました。C++98 では、ヒントは次のようになります。

position が挿入された要素の前にある要素を指している場合、関数は挿入時間を最適化します。

ただし、C++11 ではヒントが変更され、次のようになります。

position が挿入された要素に続く要素 (または最後の要素の場合は最後) を指している場合、関数は挿入時間を最適化します。

ただし、C++98 でも C++11 でも、戻り値は同じです。

新しく挿入された要素、またはセット内に既に同じ値を持つ要素のいずれかを指す反復子。

C++98 の場合、次のように一連の隣接する項目を挿入するコードがあります。

これを C++11 で次のように変更できます。

しかし、C++98 から C++11 に移行するためにコードをリファクタリングする必要があることに悩まされています。ここで何か間違ったことをしているのですか、そうでない場合、この変更の動機は何だったのでしょうかinsert()。戻り値ではありませんか?

0 投票する
1 に答える
2469 参照

c++ - 値が std::set (何かからセットへのマップ) である std::map で emplace() を使用する方法は?

問題

というstd::map<int, std::set<int>>名前がありmisiます。misi.emplace(2345, {6, 9});以下に示すように、なぜ期待どおりに動作しmisi.emplace({2345, {6, 9}});ないのか疑問に思っています。

コード

上記は、イニシャライザ リスト コンストラクタと完全に機能std::setすることがわかります。emplace()

上記はstd::mapto のintものintで、メソッドも完全に機能することがわかりますが、最後の例では、std::pairが何らかの形で冗長である可能性があります。std::pairはその場で構築されているのだろうか。(まあ、そうではないと思います)

astd::mapから a のstd::set場合、イニシャライザ リスト コンストラクタは上記のように完全に機能します。しかし、そうでemplace()はありません!(下図参照)

ここでは、次の構文は問題ありませんが、私が望んでいたことを正確には実行しません。

std::pairということで、インプレースを作成する方法はないようで、はインプレースstd::setで作成されているようです (そうですか?)。誰にもアイデアはありますか?

私が使用しているコンパイラは次のとおりです。

0 投票する
3 に答える
2736 参照

c++ - std::set の要素の変更

私は次のコードを持っています - :

出力 -:

セットの要素は、関数によってまったく変更されていませんreverse()
セット内の要素はまったく変更できないと思います。しかし、これが事実である場合、そもそもなぜコンパイラ自体がエラーを出さないのでしょうか?

-std=c++14Windows 7 でフラグ付きの TDM-GCC 4.9.2 を使用しています。