2015-12-25 2 views
-2
class CallerId{ 
private: 
    string name; 
    int* number; 
public: 
     . 
     . 
} 

У меня есть этот класс, и я хочу поместить объекты этого типа в контейнер с возрастанием и убыванием (на основе имени строки). Есть ли способ сделать это?Set container object

+0

Да , возможно. – LogicStuff

+0

напишите 'operator <()' then use 'std :: set' – JSF

+0

Да, пожалуйста, уточните, что вы пробовали. Это прямо (используйте std :: set) и реализуйте

ответ

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

Несомненно, создайте std::list<CallerId> и соберите его, используя sort member function.

Вы определяете функцию сравнения двух объектов этого класса и передаете ее sort.

+0

Мне нужно сделать это с помощью Set. –

Смежные вопросы