我想按字母顺序列出我的集合的输出。下面是试图达到这个目标,但它似乎缓慢/低效,我还没有完成它。
void ordered(ostream &os) {
bool inserted = false;
for (objects::iterator i = begin(); i != end(); ) {
for (objects::iterator x = begin(); x != end(); ++x) {
if((**i) < (**x)) { //overloaded and works
os << **i << endl;
inserted = true;
break;
}
}
if(inserted) {
++i;
}
}
}
显然,这只会输出按字母顺序排在第一个对象之后的对象。
我还考虑过将一个集合中的对象移动到另一个容器中,但它仍然效率低下。
答案 0 :(得分:4)
std::set
是一个有序的容器,参见参考:
http://en.cppreference.com/w/cpp/container/set
std::set
是一个关联容器,包含有序集Key
类型的唯一对象。使用密钥比较进行排序 功能比较。搜索,删除和插入操作具有 对数复杂度。集合通常实现为红黑色 树。
答案 1 :(得分:0)
std::set
已订购。看起来您只需要使用自定义比较器来比较指向的值而不是指针本身(这是默认值):
template<typename T> struct pless {
inline bool operator()(const T* a, const T* b) const { return *a < *b; }
};
std::set<Foo*, pless<Foo> > objects;