std::vector
数组可以轻松有效地转换为:
template <typename T, int N>
vector<T> array_to_vector(T(& a)[N]) {
return vector<T>(a, a + sizeof(a) / sizeof(T));
}
是否有类似的方法可以将二维数组转换为 astd::map
而无需遍历成员?这看起来像是一个不寻常的函数签名,但在我的特殊情况下,这些映射中的键和值将属于同一类型。
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;
*/
}
同样,我不是在寻找迭代数组每个成员的代码的答案......我可以自己写。如果不能以更好的方式完成,我会接受它作为答案。