std :: vector emplace和std :: vector emplace back with pair

时间:2017-07-12 05:57:10

标签: c++ c++11 vector stl emplace

我有这段代码:

std::vector<std::pair<const std::string, int>> vec;

vec.emplace_back("a", 1); //success
vec.emplace(vec.end(), "b", 2); //compile error

vec.emplace_back(std::make_pair<const std::string, int>("c", 3));  //success
vec.emplace(vec.end(),
     std::make_pair<const std::string, int>("d", 4)); //compile error

你能解释一下为什么吗?

1 个答案:

答案 0 :(得分:4)

std::vector::emplace_back以外,std::vector::emplace要求元素类型符合MoveAssignable的要求,但std::pair<const std::string, int>const std::string作为其第一个元素,则不满足那个。

  

类型要求