class CallerId{
private:
string name;
int* number;
public:
.
.
}
我有这个类,我希望将该类型的对象放在一个具有升序和降序的set容器中(基于字符串名称)。 有没有办法这样做?
答案 0 :(得分:0)
如果您想使用std::set
,则必须实施operator <
...
#include <set>
class CallerId{
private:
std::string name;
int* number;
public:
CallerId( std::string na, int* nu=nullptr) : name(na), number(nu) {}
bool operator <( const CallerId &src) const { return name < src.name; }
};
std::set<CallerId> callIdSet;
callIdSet.insert( CallerId( "a" ) );
callIdSet.insert( CallerId( "b" ) );
...另一种方法是使用std::map
CallerId::name
是您的关键......
#include <map>
class CallerId{
private:
std::string name;
int* number;
public:
CallerId( std::string na, int* nu=nullptr) : name(na), number(nu) {}
const std::string& Name() const { return name; }
};
CallerId ida("a");
CallerId idb("b");
std::map<std::string,CallerId> callIdMap;
callIdMap.emplace( ida.Name(), ida );
callIdMap.emplace( idb.Name(), idb );
答案 1 :(得分:-1)
当然,创建std::list<CallerId>
并使用sort member function对其进行排序。
您自己定义一个函数来比较该类的两个对象并将其传递给sort
。