我的程序不断抛出编译错误,我无法弄清楚为什么会发生错误
My program keeps throwing compilation error,I am not able to figure out why the error has occured
无法弄清楚程序不断抛出的错误。当我取消引用迭代器时,程序不断抛出错误。谁能告诉我我哪里做错了?代码的问题是这样的"给定五个正整数,找到可以通过对五个整数中的四个相加来计算的最小值和最大值。然后将各自的最小值和最大值打印为一行两个空格分隔的长整数。
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
}
解决方案.cpp:在函数"void miniMaxSum(std::vector("中:解决方案.cpp:9:9:错误:与"运算符<<"不匹配(操作数类型为"std::ostream"{aka "std::basic_ostream"} 和"std::p air"( cout<<*mn.first<<" "<<*mn.second; ~~~~^~~~~~~~~~~~
编辑:我的答案解决了编译问题,但OP函数没有做他们想要它做的事情。 约翰的回答解决了真正的算法问题。
我重新设计了您的代码片段以使其可立即编译:
#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
我这样做是为了将您和我的片段之间的差异降至最低。
所以这是解决你的问题的方法
void miniMaxSum(vector<int> arr) { //arr = {1,2,3,4,5}
vector<int> results(arr.size());
for (size_t i = 0; i < arr.size();i++)
{
results[i] = accumulate(arr.begin(), arr.end(), 0) - arr[i];
}
auto mn = minmax_element(results.begin(), results.end());
cout << *(mn.first) << " " << *(mn.second);
}
基本错误是你选择了unordered_map<int,int>
而不是vector<int>
来存储中间结果。
请注意,正确的语法是*(mn.first)
和*(mn.second)
,因为您有一对迭代器,而不是指向一对迭代器的迭代器。
工作示例
- 写一个分数类,我无法弄清楚这些错误
- 分段错误(核心转储)但无法弄清楚
- 任何人都可以弄清楚这段代码如何显示运行错误?它打印无限时间 -1 以及正确答案
- 我无法弄清楚"对Winmain@16错误的未定义引用"
- 我的程序不断抛出编译错误,我无法弄清楚为什么会发生错误
- 无法弄清楚错误来自哪里(调试器说分段错误)
- 无法弄清楚此错误的含义
- 我在用c ++编程时一直遇到LNK2005错误,我似乎无法弄清楚问题是什么
- 我无法弄清楚我的程序的问题,即使我已经查看了错误日志消息
- C 向量下标超出范围,没有逻辑错误,无法弄清楚
- 运行时检查失败#2 - 变量周围的堆栈'myArray'已损坏.- 似乎无法弄清楚如何删除此错误
- 我无法弄清楚此访问冲突错误.有人可以在这里帮助我吗?
- 一直试图调试此加密算法.无法弄清楚什么是错误
- 链接错误:无法弄清楚如何将数组作为函数参数传递/接收
- 在 GetTransfer 之后,我在帐户 1 收到未分配变量错误。我无法弄清楚我搞砸了什么逻辑错误
- C++ 简单的指针错误无法弄清楚为什么?
- 我一直收到错误LNK2019,似乎无法弄清楚如何解决它
- 无法弄清楚为什么我的程序在 spoj 上给出运行时错误而不是在 ideone 上给出运行时错误的原因
- 我怎样才能弄清楚这个分段错误发生的位置和原因
- C ++中的构建错误,未定义的符号,在这里尝试了其他答案,无法弄清楚