首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >multimap<vector<int> >,char>如何排序?

multimap<vector<int> >,char>如何排序?
EN

Stack Overflow用户
提问于 2018-04-12 00:27:04
回答 2查看 89关注 0票数 0

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

代码语言:javascript
复制
#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°C

15 14 b

9 17 a

我想要将整数相加,然后对其进行排序:(将数字从最大到最小排序

80+15>15+14>9+17

如何做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2018-04-12 00:34:30

您将需要使用自定义的比较函数/函数器来帮助您完成此任务。

代码语言:javascript
复制
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
   }
};

并使用:

代码语言:javascript
复制
typedef multimap<vector< int >, char, Compare> mmap;

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

代码语言:javascript
复制
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 ;
}
票数 5
EN

Stack Overflow用户

发布于 2018-04-12 00:38:35

您在内部for循环中初始化了iter:

for ( iter = foo.begin() ; iter != foo.end() ; ++iter )

但是,您尝试在外部for循环中进行访问,其中它不指向任何内容:

for ( int i = 0 ; i < iter->first.size() ; ++i )

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49780192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档