c++ - 我的程序不断抛出编译错误,我无法弄清楚错误发生的原因

标签 c++ stl

似乎无法找出程序不断抛出的错误。当我取消引用迭代器时,程序不断抛出错误。谁能告诉我哪里出错了? 代码的问题是这样的“给定五个正整数,找到可以通过恰好对五个整数中的四个求和来计算的最小值和最大值。然后将各自的最小值和最大值打印为两个空格分隔的单行长整数。”

void miniMaxSum(vector<int> arr) {   //arr = {1,2,3,4,5}
    int sum = 0;
    unordered_map<int,int> results;
    for(size_t i = 0;i < arr.size();i++)
    {
        results[arr[i]] = accumulate(arr.begin(),arr.end(),sum) - arr[i];
    }
    pair<unordered_map<int,int>::iterator,unordered_map<int,int>::iterator> mn;
    mn = minmax_element(results.begin(),results.end());
    cout<< *mn.first<<" "<<*mn.second; //line where the error is occuring
}

Solution.cpp:在函数“void miniMaxSum(std::vector)”中: Solution.cpp:9:9: 错误:'operator<<' 不匹配(操作数类型为'std::ostream' {aka 'std::basic_ostream'} 和'std::pair') cout<< *mn.first<<""<<*mn.second; ~~~~^~~~~~~~~~~~

最佳答案

编辑:我的回答修复了编译问题,但是 OP 函数没有按照他们想要的方式执行。 John 的回答解决了真正的算法问题。

我修改了你的代码片段以使其立即可编译:

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <unordered_map>

using namespace std;

void miniMaxSum(vector<int> arr) {   //arr = {1,2,3,4,5}
    int sum = 0;
    unordered_map<int,int> results;
    for(size_t i = 0;i < arr.size();i++)
    {
        results[arr[i]] = accumulate(arr.begin(),arr.end(),sum) - arr[i];
    }
    pair<unordered_map<int,int>::iterator,unordered_map<int,int>::iterator> mn;
    mn = minmax_element(results.begin(),results.end());
    auto minIt = mn.first;
    auto maxIt = mn.second;
    cout<< "key min elem: " << minIt->first << " value min elem: " << minIt->second; 
    cout<< "key max elem: " << maxIt->first << " value max elem: " << maxIt->second;
}

问题是 mn 的类型: pair<unordered_map<int,int>::iterator,unordered_map<int,int>::iterator> . mnpair .与 mn.first你得到一个键值对的迭代器(pair 错误引用)。一旦你有了你的 pair您需要直接访问您感兴趣的元素。我在示例中明确说明了该段落。您可以在这里查看(底部的示例):https://en.cppreference.com/w/cpp/container/unordered_map对于 unordered_map 上的迭代器结构.

PS:你可能想避免 using namespace std我这样做是为了将您和我的代码段之间的差异降到最低。

关于c++ - 我的程序不断抛出编译错误,我无法弄清楚错误发生的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57230111/

相关文章:

c++ - C++结构字段的顺序在聚合初始化中是否重要

c++ - MFC的替代品

c++ - std::map 与 lambda 比较器

c++ - 一种用于对等值条目进行排序和改组的快速算法(最好使用 STL)

c++ - 霍夫曼编码树

c++ - 开关的替代品

c++ - 我如何编写一个程序来读取一个整数方阵并确定它是否是幻方?

c++ - std::multimap 中的 count() 和 find() 问题

c++ - VC2012错误C2676,VC2005错误C2784 : reverse_iterator for map of template classes

c++ - 使用c++ STL的多维 vector 求解