Я хочу использовать STL, установленный на:
- вставьте
struct
в этот набор, как struct {int id, string info};
- для каждой вставки, если идентификатор существует, не вставляйте
- сделать элемент отсортированным
Я попробовал следующий код:
#include <iostream>
#include <set>
using namespace std;
struct song
{
int m_id;
int m_hot;
song(int id,int hot)
{
this->m_id = id;
this->m_hot = hot;
}
bool operator<(const struct song & right)const
{
if(this->m_id == right.m_id) { // remove duplicated
return false;
}
if(this->m_hot != right.m_hot)
{
return this->m_hot > right.m_hot;
}
else
{
return this->m_id > right.m_id;
}
}
};
int main()
{
std::set<song> mySet;
song s1(10,100);
song s2(40,700);
song s3(40,300);
song s4(30,200);
song s5(300,200);
song s6(300,900);
mySet.insert(s1);
mySet.insert(s2);
mySet.insert(s3);
mySet.insert(s4);
mySet.insert(s5);
mySet.insert(s6);
for(auto it:mySet)
{
std::cout<<"id:"<<it.m_id<<",hot:"<<it.m_hot<<std::endl;
}
}
вывод:
Идентификатор: 300, горячий: 900
ID: 40, горячий: 700
ID: 300, горячий: 200 * +1021 *
ID: 30, горячий: 200
ID: 10, горячий: 100
Как видите, идентификатор 40 успешно удалил дубликат, но 300 не удалось.
Я думаю, что часть id 300 не должна появляться дважды, может кто-нибудь помочь мне с этим?