「std::map」の版間の差分
提供: C++入門
(ページの作成:「std::map とは、C++のSTLコンテナの1つで、連想配列です。登録した順番と関係のないstd::tr1::unordered_mapもあります。 '''...」) |
|||
行108: | 行108: | ||
1 | 1 | ||
1 => 0 | 1 => 0 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == キーでmapを検索する例 == | ||
+ | キーでmapを検索し、値を参照できます。キーでの検索には、find()を使用します。 | ||
+ | === ソースコード std_map_find1.cpp === | ||
+ | <syntaxhighlight lang="cpp"> | ||
+ | /* | ||
+ | * std_map_find1.cpp | ||
+ | * Copyright (C) 2014 kaoru <kaoru@bsd> | ||
+ | */ | ||
+ | #include <iostream> | ||
+ | #include <map> | ||
+ | |||
+ | int main(int argc, char const* argv[]) | ||
+ | { | ||
+ | std::map<int,int> m1; | ||
+ | |||
+ | m1[1] = 100; | ||
+ | m1[2] = 200; | ||
+ | m1[3] = 300; | ||
+ | |||
+ | std::map<int, int>::iterator it; | ||
+ | it = m1.find(2); | ||
+ | |||
+ | std::cout << it->first << " => " << it->second << std::endl; | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | === コンパイル === | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | c++ std_map_find1.cpp -o std_map_find1 | ||
+ | </syntaxhighlight> | ||
+ | === 実行例 === | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | % ./std_map_find1 | ||
+ | 2 => 200 | ||
+ | </syntaxhighlight> | ||
+ | == キーで検索したときに見つからない場合の例 == | ||
+ | find()で検索したときに、キーが見つからない場合は、find()からend()と同じ値が返ります。 | ||
+ | === ソースコード std_map_find2.cpp === | ||
+ | <syntaxhighlight lang="cpp"> | ||
+ | /* | ||
+ | * std_map_find2.cpp | ||
+ | * Copyright (C) 2014 kaoru <kaoru@bsd> | ||
+ | */ | ||
+ | #include <iostream> | ||
+ | #include <map> | ||
+ | |||
+ | int main(int argc, char const* argv[]) | ||
+ | { | ||
+ | std::map<int,int> m1; | ||
+ | |||
+ | m1[1] = 100; | ||
+ | m1[2] = 200; | ||
+ | m1[3] = 300; | ||
+ | |||
+ | std::map<int, int>::iterator it; | ||
+ | |||
+ | it = m1.find(0); | ||
+ | |||
+ | if (it == m1.end() ) { | ||
+ | std::cout << "not found" << std::endl; | ||
+ | } else { | ||
+ | std::cout << "found" << std::endl; | ||
+ | } | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | === コンパイル === | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | c++ std_map_find2.cpp -o std_map_find2 | ||
+ | </syntaxhighlight> | ||
+ | === 実行例 === | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | % ./std_map_find2 | ||
+ | not found | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == findとendでキーの存在を確認する方法 == | ||
+ | キーがmap内に存在するか確認するには、find()とend()を使用します。簡単な例を示すと以下の通りです。 | ||
+ | <syntaxhighlight lang="cpp"> | ||
+ | if (m1.find(1) == m1.end() ) { | ||
+ | // not found... | ||
+ | } else { | ||
+ | // found! | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === ソースコード std_map_find3.cpp === | ||
+ | <syntaxhighlight lang="cpp"> | ||
+ | /* | ||
+ | * std_map_find3.cpp | ||
+ | * Copyright (C) 2014 kaoru <kaoru@bsd> | ||
+ | */ | ||
+ | #include <iostream> | ||
+ | #include <map> | ||
+ | |||
+ | int main(int argc, char const* argv[]) | ||
+ | { | ||
+ | std::map<int,int> m1; | ||
+ | |||
+ | m1[1] = 100; | ||
+ | m1[2] = 200; | ||
+ | m1[3] = 300; | ||
+ | |||
+ | if (m1.find(1) == m1.end() ) { | ||
+ | std::cout << "not found" << std::endl; | ||
+ | } else { | ||
+ | std::cout << "found" << std::endl; | ||
+ | } | ||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | === コンパイル === | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | c++ std_map_find3.cpp -o std_map_find3 | ||
+ | </syntaxhighlight> | ||
+ | === 実行例 === | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | % ./std_map_find3 | ||
+ | found | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== 関連項目 == | == 関連項目 == |
2014年11月27日 (木) 23:43時点における最新版
std::map とは、C++のSTLコンテナの1つで、連想配列です。登録した順番と関係のないstd::tr1::unordered_mapもあります。
読み方
- std::map
- えすてぃーでぃー まっぷ
目次
概要
- erase
- 要素を削除します
- find
- 要素を検索します
- insert
- 要素を挿入します
- size
- 要素数を返します
- clear
- すべての要素を削除します
- empty
- mapが空なら真を返します
[]演算子
mapは、[]演算子を用いて、添字のようにアクセスできます。存在しないキーにアクセスした場合、自動的に要素が追加されていまいます。
ヘッダファイル
#include <map>
要素の追加
std::mapは、2つの方法で要素を追加できます。
- []演算子を用いて要素を追加します。
- insert を用いて要素を追加します。
map<int, int> m1; m1.insert( map<int, int>::value_type(1, 100);
map<int, int> m1; m1[1] = 100;
std_map1.cpp の例
ソースコード std_map1.cpp
/* * std_map1.cpp * Copyright (C) 2014 kaoru <kaoru@bsd> */ #include <iostream> #include <map> int main(int argc, char const* argv[]) { std::map<int,int> m1; m1[1] = 100; m1[2] = 200; m1[3] = 300; for (auto& x:m1) { std::cout << x.first << " => " << x.second << std::endl; } return 0; }
コンパイル
c++ -std=c++11 std_map1.cpp -o std_map1
実行例
% ./std_map1 1 => 100 2 => 200 3 => 300
[]演算子で存在しない要素にアクセスすると自動的に追加される
ソースコード std_map_test1.cpp
/* * std_map1.cpp * Copyright (C) 2014 kaoru <kaoru@bsd> */ #include <iostream> #include <map> using namespace std; int main(int argc, char const* argv[]) { std::map<int,int> m1; cout << m1.size() << endl; // 当然 0 cout << m1[1] << endl; // 存在していないキーにアクセスする cout << m1.size() << endl; // 上の行のアクセスの結果、1要素追加されている for (auto& x:m1) { // キー1, 値 0 が表示される std::cout << x.first << " => " << x.second << std::endl; } return 0; }
コンパイル
c++ -std=c++11 std_map_test1.cpp -o std_map_test1
実行例
% ./std_map_test1 0 0 1 1 => 0
キーでmapを検索する例
キーでmapを検索し、値を参照できます。キーでの検索には、find()を使用します。
ソースコード std_map_find1.cpp
/* * std_map_find1.cpp * Copyright (C) 2014 kaoru <kaoru@bsd> */ #include <iostream> #include <map> int main(int argc, char const* argv[]) { std::map<int,int> m1; m1[1] = 100; m1[2] = 200; m1[3] = 300; std::map<int, int>::iterator it; it = m1.find(2); std::cout << it->first << " => " << it->second << std::endl; return 0; }
コンパイル
c++ std_map_find1.cpp -o std_map_find1
実行例
% ./std_map_find1 2 => 200
キーで検索したときに見つからない場合の例
find()で検索したときに、キーが見つからない場合は、find()からend()と同じ値が返ります。
ソースコード std_map_find2.cpp
/* * std_map_find2.cpp * Copyright (C) 2014 kaoru <kaoru@bsd> */ #include <iostream> #include <map> int main(int argc, char const* argv[]) { std::map<int,int> m1; m1[1] = 100; m1[2] = 200; m1[3] = 300; std::map<int, int>::iterator it; it = m1.find(0); if (it == m1.end() ) { std::cout << "not found" << std::endl; } else { std::cout << "found" << std::endl; } return 0; }
コンパイル
c++ std_map_find2.cpp -o std_map_find2
実行例
% ./std_map_find2 not found
findとendでキーの存在を確認する方法
キーがmap内に存在するか確認するには、find()とend()を使用します。簡単な例を示すと以下の通りです。
if (m1.find(1) == m1.end() ) { // not found... } else { // found! }
ソースコード std_map_find3.cpp
/* * std_map_find3.cpp * Copyright (C) 2014 kaoru <kaoru@bsd> */ #include <iostream> #include <map> int main(int argc, char const* argv[]) { std::map<int,int> m1; m1[1] = 100; m1[2] = 200; m1[3] = 300; if (m1.find(1) == m1.end() ) { std::cout << "not found" << std::endl; } else { std::cout << "found" << std::endl; } return 0; }
コンパイル
c++ std_map_find3.cpp -o std_map_find3
実行例
% ./std_map_find3 found