std::vector<int> a, b;
// fill vectors here...
std::map<int, int> m;
assert(a.size() == b.size());
for (size_t i = 0; i < a.size(); ++i)
m[a[i]] = b[i];
Run Code Online (Sandbox Code Playgroud)
这是一个使用标准库函数(和C++ 0x lambdas)的解决方案.
const int data1[] = { 0, 2, 4, 6, 8 };
const int data2[] = { 1, 3, 5, 7, 9 };
std::vector<int> vec1(data1, data1 + 5);
std::vector<int> vec2(data2, data2 + 5);
std::map<int,int> map;
// create map
std::transform(vec1.begin(), vec1.end(), vec2.begin(), std::inserter(map, map.end()), [](int a, int b)
{
return std::make_pair(a, b);
});
// display map
std::for_each(map.begin(), map.end(), [](const std::pair<int,int>& p)
{
std::cout << p.first << "," << p.second << "\n";
});
Run Code Online (Sandbox Code Playgroud)
注意:这假定vec1.size()不大于vec2.size().
我们将使用带有 2个输入序列的std :: transform版本。(众所周知,它看起来像是采用单个序列的序列)。
您可以通过std::make_pair<v1::value_type, v2::value_type>变压器(op)进入
std::vector<int> vec1, vec2;
std::map< int, int > mergedMap;
std::transform( vec1.begin(), vec1.end(), vec2.begin(),
std::inserter(mergedMap, mergedMap.end() ), std::make_pair<int const&,int const&> );
Run Code Online (Sandbox Code Playgroud)
我已经测试了代码,并且可以使用GNU 4.3.2很好地编译
(我现在也用C ++ 11进行了测试。当我将make_pair更改为int const&而不是int时,它可以工作)。
如果两个输入序列的长度不同,则最好是第一个较短,而第二个序列中的后面的元素将被忽略。如果第一个较长,则会产生不确定的行为。
| 归档时间: |
|
| 查看次数: |
10048 次 |
| 最近记录: |