【问题标题】:How can I loop over pair in c++ [closed]如何在 C++ 中循环对 [关闭]
【发布时间】:2018-12-14 09:50:21
【问题描述】:

我正在尝试成对打印元素,但它抛出错误:“没有匹配的函数调用”
代码:

#include <utility>
#include <iostream>
using namespace std;

int main()
{
    pair<int, string> pairVec;
    pairVec = make_pair(1, "One");
    pairVec = make_pair(2, "Two");
    pairVec = make_pair(3, "Three");
    for(auto iter:pairVec)
    {
        std::cout << "First: " << iter.first << ", Second: "
                  << iter.second << std::endl;
    }
    return 0;
}

【问题讨论】:

  • 您正在覆盖pairVec。提示:这是一对,而不是pairs 中的vector
  • 您希望看到多少个元素被打印出来?
  • iter 的类型是什么?尝试自己填写类型,不要写auto
  • 您的代码的预期行为是什么?

标签: c++ algorithm c++11 std-pair


【解决方案1】:

你根本没有制作矢量。您可能想这样做:

int main()
{
    std::vector<pair<int, string>> pairVec;  // create a vector of pairs
    pairVec.emplace_back(1, "One"); // adding pairs to the vector
    pairVec.emplace_back(2, "Two");
    pairVec.emplace_back(3, "Three");
    for (auto iter : pairVec) {
        std::cout << "First: " << iter.first << ", Second: "
        << iter.second << std::endl;
    }
    return 0;
}

【讨论】:

  • 感谢您的宝贵时间!我提到过向量吗?我只需要遍历这对并打印元素
  • @DheerajN 我提到过矢量吗? 是的,你确实提到了。你为什么#include &lt;vector&gt;?你为什么叫你的变量pairVec
  • @Blaze 它工作正常!但是当我提到迭代器的类型而不是 auto: std::vector>::const_iterator it,使用 it.begin 进行常规 for 循环时,它会抛出错误“没有名为“第一”的成员”
  • @DheerajN 这是因为该常规循环中的定义不同于 auto-使用基于范围的 for 循环定义的定义(至少在 MSVC 中这是相当笨拙的东西)。但如果你将`iter.first` 更改为iter-&gt;firstiter.second 一样,这将有效。
  • 这里std::pair 的目的是为右侧的元素排序(std::pair.second)。您将如何更改顺序,例如将元素 std::vector<:pair ...>> 与 std::vector<:pair ...>> 交换?干杯
猜你喜欢
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-26
  • 1970-01-01
  • 1970-01-01
  • 2013-08-18
相关资源
最近更新 更多