这是代码,它可以编译,但不能运行,为什么?:
#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
如何做到这一点?
发布于 2018-04-12 00:34:30
您将需要使用自定义的比较函数/函数器来帮助您完成此任务。
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 ;
}发布于 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 )
https://stackoverflow.com/questions/49780192
复制相似问题