带自定义键的 std::map

Jac*_*cko 0 c++ std hashmap

我想使用带有以下自定义键的标准地图:

struct ParserKey{
    ParserKey(uint16_t compno,
             uint8_t resno,
             uint64_t precinctIndex) : compno_(compno),
                                       resno_(resno),
                                       precinctIndex_(precinctIndex)
    {
    }
     uint16_t compno_;
     uint8_t resno_;
     uint64_t precinctIndex_;
};
Run Code Online (Sandbox Code Playgroud)

不过,没有明显的方式来订购钥匙。这些键可以订购吗?或者我是否需要不同的关联集合?

Fra*_*eux 6

如果您不关心具体顺序而只想满足排序要求,则一种常见且简单的模式是std::tie与比较实例的所有类成员一起使用,然后比较这些结果。

std::tie创建std::tuple对成员的引用,并std::tuple实现operator<按字典顺序比较其元素(在本例中为对象的成员)。

在您的情况下,使用 member operator<

bool operator<(const ParserKey & other) const
{
    return std::tie(compno_, resno_, precinctIndex_) < 
        std::tie(other.compno_, other.resno_, other.precinctIndex_);
}
Run Code Online (Sandbox Code Playgroud)

实例https://godbolt.org/z/v433v54jz