std::vector
配列は簡単かつ効率的に変換できます。
template <typename T, int N>
vector<T> array_to_vector(T(& a)[N]) {
return vector<T>(a, a + sizeof(a) / sizeof(T));
}
std::map
メンバーを反復処理せずに2次元配列をに変換する同様の方法はありますか?これは珍しい関数シグネチャのように見えますが、私の特定の状況では、これらのマップのキーと値は同じタイプになります。
template <typename T, int N>
map<T, T> array_to_map(T(& a)[N][2]) {
// ...?
}
これが私がこの質問のためにまとめたテストコードです。コンパイルしてそのまま実行します。目標は、コメントなしのブロックコメントを使用してコンパイルすることmain
です。
#include <iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;
template <typename T, int N>
vector<T> array_to_vector(T(& a)[N]) {
return vector<T>(a, a + sizeof(a) / sizeof(T));
}
template <typename T, int N>
map<T, T> array_to_map(T(& a)[N][2]) {
// This doesn't work; members won't convert to pair
return map<T, T>(a, a + sizeof(a) / sizeof(T));
}
int main() {
int a[] = { 12, 23, 34 };
vector<int> v = array_to_vector(a);
cout << v[1] << endl;
/*
string b[][2] = {
{"one", "check 1"},
{"two", "check 2"}
};
map<string, string> m = array_to_map(b);
cout << m["two"] << endl;
*/
}
繰り返しますが、配列の各メンバーを反復処理するコードで答えを探しているわけではありません...自分で書くことができます。それがもっと良い方法でできないなら、私はそれを答えとして受け入れます。