我的程序不断抛出编译错误,我无法弄清楚为什么会发生错误

My program keeps throwing compilation error,I am not able to figure out why the error has occured

本文关键字:错误 弄清楚 为什么 程序 编译 我的      更新时间:2023-10-16
似乎

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

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),因为您有一对迭代器,而不是指向一对迭代器的迭代器。

工作示例

相关文章: