设置容器对象

时间:2015-12-25 16:24:09

标签: c++ string stl set

class CallerId{
private:
    string name;
    int* number;
public:
       .
       .
}

我有这个类,我希望将该类型的对象放在一个具有升序和降序的set容器中(基于字符串名称)。 有没有办法这样做?

2 个答案:

答案 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