如何更改std :: set的比较函数?

问题描述 投票:0回答:1

假设我有这样的数据结构:

std::set<A, F1> sa; //A is a custom structure and F1 is its comparison function.

由于sa暴露给许多其他用户,因此我无法更改变量名称。现在,我需要添加另一个比较功能,例如F2,但是我仍然用sa指向它。是否可以在不更改名称的情况下切换比较功能?我有一个解决方案,但是有一个问题,让我们先看一下代码:

class SortedQ
{
public:
    virtual void insert(const Idle_Agent& ia) = 0;
    virtual bool erase(const std::string& name) = 0;
};
template <typename F>
class CustomSortedQ : public SortedQ
{
public:
    void insert(const Idle_Agent& ia)
    {
        ...
    }
    bool erase(const std::string& name)
    {
        ...
    }
private:
    std::set<Idle_Agent, F> aq;
};

std::shared_ptr<SortedQ> ssq;
if(...)
{
    ssq.reset(new CustomSortedQ<F1>())
}
else
{
    ...
}

问题是我需要使用指向基类的共享指针来遍历aq。但在在基类中,我不知道确切的数据结构是什么样子,所以我无法准确地定义虚函数。

我该怎么办?

c++ stl
1个回答
0
投票

您不

如果要在插入某些元素后更改顺序,则程序将具有未定义的行为。如果幸运的话,尝试查找或插入元素会崩溃。如果运气不太好,它将无法找到存在的元素。如果你不走运,恶魔会从你的鼻子里飞出来。

元素的顺序是集合的类型的一部分。

© www.soinside.com 2019 - 2024. All rights reserved.