将MAP容器复制到X的末尾

时间:2016-05-05 02:43:51

标签: c++11

假设m的类型为map<int, string>,我们会遇到对

的调用

copy(m.begin(), m.end(), back_inserter(x))

我们可以对x的类型说些什么?

如果copy(m.begin(), m.end(), back_inserter(x))是leagal,请举个例子。感谢

3 个答案:

答案 0 :(得分:2)

  

我们可以对x的类型说些什么呢?

我们可以这样说:

  • m.value_typepair<const int, string>,因此可能属于x.value_type(不是严格要求,但在STL中是常规的)。
  • x.push_back(value_type)必须有效,才能使back_inserter(x)生效。

也就是说,x的唯一要求是它支持以下内容:

x.push_back(pair<const int, string>());

这个函数实际上做了什么并不重要,但它必须具有此名称并支持此参数类型。

答案 1 :(得分:1)

谢谢大家!这是我的例子

map<int, string> m;         // 'm' is associative container with type map<int, string> 

m[1] = "Serge";
m[2] = "Iulia";

// 'back_inserter(x))' can be used for the container, so 'x' is a vector of pair
vector < pair<int, string> > x;

copy(m.begin(), m.end(), back_inserter(x));

// display vector of pair 'x'
cout << "vector <pair<int, string> > x" << endl;
for (vector<pair<int, string> >::const_iterator iter = x.begin(); iter != x.end(); ++iter) {
    cout << iter->first << " " << iter->second <<  endl;
}

答案 2 :(得分:0)

x必须是容器类型。 back_inserter返回一个迭代器,用于将元素添加到作为参数传递的容器的末尾。请参阅std::back_inserter

back_inserterstd::map不合法。作为参数提供的容器类型必须支持push_back所不具备的std::map。要亲眼看看:http://ideone.com/b2t2iN