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

関連項目



スポンサーリンク