gpt4 book ai didi

C++ 无序对类型

转载 作者:太空宇宙 更新时间:2023-11-04 15:31:30 24 4
gpt4 key购买 nike

我想在 C++ 中创建一个无序对类型,即 unordered_set 保证恰好有两个元素。这是我想出的,但问题是如果我使用这种方法,我必须覆盖更多的东西——每个比较运算符,等等。有没有更简单的方法?

class unordered_pair : public std::pair<t, u>
{
public:
unordered_pair(t x, u y) : std::pair<t, u>(x,y) {};
bool operator ==(const unordered_pair<t,u>& rhs)
{
if ((this->first < this->second) ^ (rhs.first < rhs.second))
{
return this->second == rhs.first && this->first == rhs.second;
}
else
{
return this->first == rhs.first && this->second == rhs.second;
}
}
};

最佳答案

我会做类似的事情

struct unordered_pair : std::pair<t, u>
{
bool swapped;

unordered_pair(t x, u y) :
std::pair<t, u>(x,y),
swapped(false);
{
sort();
}

void sort() {
swapped = first > second;
if (swapped)
std::swap(first, second);
}

std::pair<t, u> getOrig() {
if (swapped)
return std::pair<t,u>(second, first);
return std::pair<t, u>(first, second);
}
}

然后你每次改变 first 或 second 时调用 sort() ;并且所有的比较运算符都是免费从 std::pair 中获取的!

动机是如果你不关心比较的排序,那么你大部分时间都不会关心排序;这意味着大多数时候,您不需要获得原始元素。

编辑:您在评论中声明我们可以假设 t==u ...在这种情况下,我建议去掉 t 或 u - 并将其设为 std::pair<t, t>

关于C++ 无序对类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51024899/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com