gpt4 book ai didi

c++ - multimap> ,char> 怎么排序呢?

转载 作者:太空宇宙 更新时间:2023-11-04 15:12:34 24 4
gpt4 key购买 nike

下面是代码,可以编译,但是不能运行,为什么?:

#include <iostream>
#include <map>
#include <vector>
using namespace std;
int main() {
typedef multimap<vector< int >, char> mmap;

mmap foo;
vector<int> v;
v.push_back(15);
v.push_back(14);
foo.insert(pair<vector< int >, char> (v, 'b'));
v.clear();
v.push_back(15);
v.push_back(80);
foo.insert(pair<vector< int >, char> (v, 'c'));
v.clear();
v.push_back(9);
v.push_back(17);
foo.insert(pair<vector< int >, char> (v, 'a'));
v.clear();

mmap::iterator iter;

for (int i = 0; i < iter->first.size(); ++i) {
wcout << iter->first[i] << " ";
for (iter = foo.begin(); iter != foo.end(); ++iter) {
wcout << iter->second << " ";
}
wcout << endl;
}
}

输出:

15 80 摄氏度

15 14 b

9 17 a

我想加上整数,然后排序:(从大到小排序

80+15>15+14>9+17

怎么做?

最佳答案

您需要使用自定义比较函数/仿函数来帮助您。

struct Compare
{
bool operator()(std::vector<int> const& lhs, std::vector<int> const& rhs) const
{
int sum1 = std::accumulate(lhs.begin(), lhs.end(), 0);
int sum2 = std::accumulate(rhs.begin(), rhs.end(), 0);
return (sum1 > sum2); // Not sum1 < sum2, if I understood your question
}
};

并使用:

typedef multimap<vector< int >, char, Compare> mmap;

您还必须修复打印 foo 内容的代码。

mmap::iterator iter = foo.begin();
for ( ; iter != foo.end(); ++iter )
{
for ( size_t i = 0 ; i < iter->first.size() ; ++i ) {
wcout << iter->first[i] << " " ;
}
wcout << iter->second << " " ;
wcout << endl ;
}

关于c++ - multimap<vector<int>> ,char> 怎么排序呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49780192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com