mapのキーにvectorが使える


このエントリーをはてなブックマークに追加

またSTLネタ。ちょっと意外な感じがするが、実際に試すと確かに使える。

#include <vector>
#include <map>
#include <iostream>

using namespace std;

int main(void){
    map< vector<int>, int > m;

    vector<int> vec;
    vec.push_back(2);
    vec.push_back(3);
    vec.push_back(5);

    vector<int> vec2;
    vec2.push_back(2);
    vec2.push_back(3);

    vector<int> vec3(vec);
    vector<int> vec4(vec2);

    m[ vec ] = 100;
    m[ vec2 ] = 200;
    m[ vec3 ] = 300;
    m[ vec4 ] = 400;

    for(map< vector<int>, int >::iterator it = m.begin();
        it != m.end();
        ++it){
        vector<int> v = it->first;
        cout << "key: [";
        for(int i = 0; i < v.size(); ++i){
            cout << v[i] << ", ";
        }
        cout << "]  ";
        cout << "value: " << it->second << endl;
    }
    
    return 0;
}

出力は以下の通り。vectorのサイズと、vectorのすべて要素が一致するときに、同じキーだとみなされるようだ。

key: [2, 3, ]  value: 400
key: [2, 3, 5, ]  value: 300

ちなみに、mapのキーとして構造体を用いるときは比較関数オブジェクトが必要になる。参考:stl mapで独自の型(構造体など)をキーにする方法 : 午後Tブログ