C++std::set的排序输出

Ordering output of C++ std::set

本文关键字:输出 排序 set C++std      更新时间:2023-10-16

我想按字母顺序列出集合的输出。下面是一个尝试,但它似乎很慢/效率低下,我甚至还没有完成。

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;
        }
    }
}

显然,这将只输出按字母顺序位于第一个对象之后的对象。

我还考虑过将对象从一个集合移动到另一个容器中,但这似乎仍然效率低下。

std::set是一个有序容器,请参阅参考:
http://en.cppreference.com/w/cpp/container/set

std::set是一个关联容器,包含的排序集类型为CCD_ 3的唯一对象。使用关键字比较进行排序函数Compare。搜索、删除和插入操作对数复杂度。集合通常实现为红黑树木。

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;