list容器的unique函数,可以移除相邻的重复元素,但具体保留哪一个呢?比如我有一个类,放在list中按值score排序后,再unique(相等判断是按另一个值value判断的),那重复元素保留的是score高的还是低的还是不定?我做了一个实验:
#include <iostream>
#include <list>
using namespace std;
class Test
{
private:
int s;
int v;
protected:
public:
Test(int s, int v):s(s),v(v){}
friend bool operator == (Test t1, Test t2)
{
return t1.v == t2.v;
}
friend bool operator < (Test t1, Test t2)
{
return t1.s > t2.s;
}
int GetScore()
{
return s;
}
};
int main(int argc, char **argv)
{
list<Test> TestList;
TestList.push_back(Test(1,1));
TestList.push_back(Test(2,1));
TestList.push_back(Test(4,1));
TestList.push_back(Test(3,1));
TestList.sort();
TestList.unique();
for (list<Test>::iterator it = TestList.begin(); it != TestList.end(); ++it)
{
cout << it->GetScore() << endl;
}
system("pause");
return 0;
}
运行结果为:4
注意:我插入元素的顺序已经打乱
从这个实验我推断,移除算法采用的是与前一元素比较的策略,相同则移除,即保留排在前面的元素。
可以采用这个策略实现像例子中的用法:先按优先级排序,后unique,实现你想要的去重