std::map
提供: C++入門
スポンサーリンク
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
関連項目
ツイート
スポンサーリンク