【问题标题】:Adding to a vector of pair添加到对向量
【发布时间】:2011-12-15 08:56:03
【问题描述】:

我有一个 vector 或 pair 像这样:

vector<pair<string,double>> revenue;

我想从这样的地图中添加一个字符串和一个双精度:

revenue[i].first = "string";
revenue[i].second = map[i].second;

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

revenue.push_back("string",map[i].second);

但这表示不能接受两个参数。那么如何添加到这个vector 的pair 呢?

【问题讨论】:

  • 所以你没有一个向量对,而是一个对向量,或对向量。一旦你明白了这一点,你就解决了你的问题。

标签: c++ vector std-pair


【解决方案1】:

使用std::make_pair:

revenue.push_back(std::make_pair("string",map[i].second));

【讨论】:

  • emplace_back 呢?
  • @Mr.WorshipMe,你可以在 C++11 中使用它。有关示例,请参见下面的答案。不过我不确定你在问什么。
  • 我指的是一个更优雅且可能更快的解决方案...我没有看到下面被低估的答案...您可能想要更新您的答案...
  • 这种方法在构造函数中会有所不同吗? (例如,我有一个包含对向量的类,并希望从二维初始化器列表中读取。内部的应该是对。所以我循环和vec.push_back(make_pair ...) 像这样)
【解决方案2】:

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

revenue.emplace_back("string", map[i].second);

它只是在原地创建一个新元素。

【讨论】:

    【解决方案3】:
    revenue.pushback("string",map[i].second);
    

    但这表示不能接受两个参数。那么如何添加到这个向量对呢?

    您走在正确的道路上,但请考虑一下;你的向量有什么?它当然不会在一个位置保存字符串和 int,而是保存Pair。所以……

    revenue.push_back( std::make_pair( "string", map[i].second ) );     
    

    【讨论】:

      【解决方案4】:

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

      revenue.push_back({"string", map[i].second});
      

      【讨论】:

        【解决方案5】:

        阅读以下文档:

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

        或

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

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

        【讨论】:

          【解决方案6】:
          revenue.push_back(pair<string,double> ("String",map[i].second));
          

          这会起作用。

          【讨论】:

            【解决方案7】:

            您可以使用std::make_pair

            revenue.push_back(std::make_pair("string",map[i].second));
            

            【讨论】:

              【解决方案8】:

              使用emplace_back 函数比任何其他方法都要好得多,因为它会就地创建一个T 类型的对象,其中vector&lt;T&gt;,而push_back 期望您提供一个实际值。

              vector<pair<string,double>> revenue;
              
              // make_pair function constructs a pair objects which is expected by push_back
              revenue.push_back(make_pair("cash", 12.32));
              
              // emplace_back passes the arguments to the constructor
              // function and gets the constructed object to the referenced space
              revenue.emplace_back("cash", 12.32);
              

              【讨论】:

                【解决方案9】:

                正如许多人建议的那样,您可以使用std::make_pair。

                但我想指出另一种方法:

                revenue.push_back({"string",map[i].second});
                

                push_back() 接受单个参数,因此您可以使用“{}”来实现这一点!

                【讨论】:

                  【解决方案10】:

                  尝试使用另一个临时对:

                  pair<string,double> temp;
                  vector<pair<string,double>> revenue;
                  
                  // Inside the loop
                  temp.first = "string";
                  temp.second = map[i].second;
                  revenue.push_back(temp);
                  

                  【讨论】:

                    猜你喜欢
                    • 2018-04-06
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-04-27
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多