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