设置容器对象
Set container object
class CallerId{
private:
string name;
int* number;
public:
.
.
}
我有这个 class,我希望将该类型的对象放入一个按升序和降序排列的集合容器中(基于字符串名称)。
有什么可行的方法吗?
当然,创建一个 std::list<CallerId>
并使用 sort member function 对其进行排序。
您自己定义一个函数来比较 class 的两个对象并将其传递给 sort
。
如果您想使用 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 );
class CallerId{
private:
string name;
int* number;
public:
.
.
}
我有这个 class,我希望将该类型的对象放入一个按升序和降序排列的集合容器中(基于字符串名称)。 有什么可行的方法吗?
当然,创建一个 std::list<CallerId>
并使用 sort member function 对其进行排序。
您自己定义一个函数来比较 class 的两个对象并将其传递给 sort
。
如果您想使用 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 );