添加到对的向量

Ric*_*ard 48 c++ vector std-pair

我有一个vectorpair像这样的:

vector<pair<string,double>> revenue;
Run Code Online (Sandbox Code Playgroud)

我想在地图中添加一个字符串和一个double,如下所示:

revenue[i].first = "string";
revenue[i].second = map[i].second;
Run Code Online (Sandbox Code Playgroud)

但由于收入未初始化,因此出现了出界错误.所以我尝试使用vector::push_back这样的:

revenue.push_back("string",map[i].second);
Run Code Online (Sandbox Code Playgroud)

但那说不能采取两个论点.那么,如何可以添加到这个vectorpair

ava*_*kar 96

用途std::make_pair:

revenue.push_back(std::make_pair("string",map[i].second));
Run Code Online (Sandbox Code Playgroud)

  • emplace_back怎么样? (2认同)
  • @Mr.WorshipMe,你可以在C++11中使用它。请参阅下面的答案作为示例。我不确定你在问什么。 (2认同)
  • 我指的是一个更优雅,可能更快的解决方案...我没有看到下面的评价不足的答案...你可能想要更新你的答案...... (2认同)

m47*_*47h 32

恕我直言,一个非常好的解决方案是使用c ++ 11 emplace_back函数:

revenue.emplace_back("string", map[i].second);
Run Code Online (Sandbox Code Playgroud)

它只是创建了一个新元素.


Ed *_* S. 10

revenue.pushback("string",map[i].second);
Run Code Online (Sandbox Code Playgroud)

但那说不能采取两个论点.那么我该如何添加到这个矢量对呢?

你是在正确的道路上,但想一想; 你的载体有什么作用?它肯定没有一个字符串和一个int在一个位置,它拥有一个Pair.所以...

revenue.push_back( std::make_pair( "string", map[i].second ) );     
Run Code Online (Sandbox Code Playgroud)


Hsu*_*Hau 7

或者您可以使用初始化列表:

revenue.push_back({"string", map[i].second});
Run Code Online (Sandbox Code Playgroud)


hoc*_*chl 6

阅读以下文档:

http://cplusplus.com/reference/std/utility/make_pair/

要么

http://en.cppreference.com/w/cpp/utility/pair/make_pair

我认为这会有所帮助.这些网站是C++的良好资源,尽管后者似乎是目前的首选参考.