高分求教向STL容器:multiset中插入元素失败问题。
问题1:
在下面的代码中我定义了一个仿函数SortCriterion用来指定PairSet的排序规则。
但是 SortCriterion 不仅起不到应有的作用,而且好多元素都会插入失败(如果用默认的排序规则,所有的元素都会插入成功)。
请问各位大侠错在哪里?
#include <iostream>
#include <set>
#include <algorithm>
#include <iomanip>
#include <fstream>
#include <utility>
using namespace std;
class SortCriterion
{
public:
bool operator() (const pair<int, int>& p1, const pair<int, int>& p2) const
{
return (p1.first / p1.second) > (p2.first / p2.second);
};
};
int main()
{
typedef multiset<pair<int, int>, SortCriterion> PairSet;
fstream cin("data.txt");
int max;
PairSet Set;
int vi, wi;
while (cin >> vi >> wi)
{
Set.insert(pair<int, int>(vi, wi));
}
for (PairSet::iterator it = Set.begin(); it != Set.end(); ++it)
{
cout << setw(5) << it->first << setw(5) << it->second << endl;
}
return 0;
}
问题2:
还有就是如果在for语句上面加上
sort(Set.begin(), Set.end());
就会出线六个莫名其妙的编译错误。
请问各位大侠是为什么?