問題タブ [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++ - ヒントを使用して 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()。戻り値ではありませんか?
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で作成されているようです (そうですか?)。誰にもアイデアはありますか?
私が使用しているコンパイラは次のとおりです。
c++ - std::set の要素の変更
私は次のコードを持っています - :
出力 -:
セットの要素は、関数によってまったく変更されていませんreverse()。
セット内の要素はまったく変更できないと思います。しかし、これが事実である場合、そもそもなぜコンパイラ自体がエラーを出さないのでしょうか?
-std=c++14Windows 7 でフラグ付きの TDM-GCC 4.9.2 を使用しています。