0

我需要我的容器只包含独特的元素,所以我有一个这样的结构:

class OD
{
private:
    std::string key;
public:
    OD(){}
    OD(const WayPoint &origin, const WayPoint &destination):
        origin(origin), destination(destination)
    {
        std::stringstream str("");
        str << origin.node_->getID() << "," << destination.node_->getID();
        key = str.str();
    }
    bool operator<(const OD & rhs) const
    {
        return key < rhs.key;
    }
    bool operator()(const OD & rhs, const OD & lhs)
    {
        return rhs < lhs;
    }
};

和一个容器:

std::set<OD,OD> t;

现在我需要改变我的容器来boost::unordered_set输入,我需要修改仿函数吗?我很困惑,因为我知道我无法将 order 和 uniqueness 实现分开,而这一次容器不是 ordered 。所以我担心我的operator()超载将毫无用处。

4

1 回答 1

0

这是为 定义自定义哈希和比较运算符的示例unordered_set

#include <iostream>
#include <functional>
#include <unordered_set>

struct X
{
    std::string key_;
};

int main() {
    std::unordered_set<X,
                       std::function<size_t(const X&)>,
                       std::function<bool(const X&, const X&)> > s{
             5, // initial bucket count
             [](const X& x) { return std::hash<decltype(x.key_)>()(x.key_); },
             [](const X& lhs, const X& rhs) { return lhs.key_ == rhs.key_; }
         };
    s.insert({"one"});
    s.insert({"two"});
    s.insert({"three"});
    for (auto& x : s)
        std::cout << x.key_ << '\n';
}

看到它在这里运行。

于 2015-02-16T11:58:29.587 回答