C++でマップに要素を挿入します
この投稿では、C++でマップに要素を挿入する方法について説明します。
1.使用する std::map::insert
マップに新しい要素を挿入するための標準的な解決策は、 std::map::insert
関数。キーがまだ存在しない場合にのみ、指定されたキーと値のペアをマップに挿入します。キーがマップにすでに存在する場合、要素は挿入されません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <iostream> #include <map> int main() { std::map<int, char> map = { {1, 'A'}, {2, 'B'}, {3, 'C'} }; map.insert(std::pair<int, char>(4, 'D')); // また map.insert(std::map<int, char>::value_type(5, 'E')); for (const auto &entry: map) { std::cout << "{" << entry.first << ", " << entry.second << "}" << std::endl; } return 0; } |
出力:
{1, A}
{2, B}
{3, C}
{4, D}
{5, E}
これは、以下を使用するコードと機能的に同等です。 std::make_pair
を生成する std::pair<>
テンプレート控除を介して。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <iostream> #include <map> int main() { std::map<int, char> map = { {1, 'A'}, {2, 'B'}, {3, 'C'} }; map.insert(std::make_pair(4, 'D')); for (const auto &entry: map) { std::cout << "{" << entry.first << ", " << entry.second << "}" << std::endl; } return 0; } |
出力:
{1, A}
{2, B}
{3, C}
{4, D}
または、さらに短く、リスト初期化構文を使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <iostream> #include <map> int main() { std::map<int, char> map = { {1, 'A'}, {2, 'B'}, {3, 'C'} }; map.insert({4, 'D'}); for (const auto &entry: map) { std::cout << "{" << entry.first << ", " << entry.second << "}" << std::endl; } return 0; } |
出力:
{1, A}
{2, B}
{3, C}
{4, D}
2.使用する operator[]
The std::map::insert
キーがすでに存在する場合、関数は指定されたキーと値のペアをマップに挿入しません。既存のキーの古い値を上書きするには、次を使用できます operator[]
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <iostream> #include <map> int main() { std::map<int, char> map = { {1, 'A'}, {2, 'B'}, {3, 'C'} }; map[1] = 'D'; for (const auto &entry: map) { std::cout << "{" << entry.first << ", " << entry.second << "}" << std::endl; } return 0; } |
出力:
{1, D}
{2, B}
{3, C}
C++ 17では、 std::map
を導入しました std::map::insert_or_assign 挿入機能。に似ています operator[]
、ただし、より多くの情報を返し、マップされたタイプのデフォルトの構成可能性を必要としません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <iostream> #include <map> int main() { std::map<int, char> map = { {1, 'A'}, {2, 'B'}, {3, 'C'} }; map.insert_or_assign(1, 'D'); for (const auto &entry: map) { std::cout << "{" << entry.first << ", " << entry.second << "}" << std::endl; } return 0; } |
出力:
{1, D}
{2, B}
{3, C}
3.使用する std::map::emplace
The std::map::emplace
キーがまだ存在しない場合、関数は新しい要素をマップコンテナに挿入します。次のように使用できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <iostream> #include <map> int main() { std::map<int, char> map = { {1, 'A'}, {2, 'B'}, {3, 'C'} }; map.emplace(1, 'D'); for (const auto &entry: map) { std::cout << "{" << entry.first << ", " << entry.second << "}" << std::endl; } return 0; } |
出力:
{1, A}
{2, B}
{3, C}
{4, D}
C++ 17では、 std::map
を導入しました std::map::try_emplace 関数。それは次のように動作します std::map::emplace
、ただし、挿入が発生しない場合(キーはマップにすでに存在します)、右辺値引数から移動しません。例えば、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <iostream> #include <map> int main() { std::map<int, char> map = { {1, 'A'}, {2, 'B'}, {3, 'C'} }; map.try_emplace(1, 'D'); for (const auto &entry: map) { std::cout << "{" << entry.first << ", " << entry.second << "}" << std::endl; } return 0; } |
出力:
{1, A}
{2, B}
{3, C}
これで、C++のマップに要素を挿入することができます。