また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ブログ