gpt4 book ai didi

c++ - c++中一对对象的映射比较器

转载 作者:行者123 更新时间:2023-11-28 04:56:50 25 4
gpt4 key购买 nike

我想使用 map 根据成员输入 vector 计算对象对。如果为此目的有更好的数据结构,请告诉我。我的程序返回一个 int vector 列表。每个 int vector 是两个 int vector (一对 int vector )之间比较的输出。然而,比较的输出可能不同,尽管两个 int vector 相同(可能顺序不同)。我想存储每对 int vector 产生了多少不同的输出(int vector )。

假设我可以使用 .inp() 访问我的对象的 int vector

(a1.inp() == a2.inp () && b2.inp() == b1.inp())(a1.inp() == b2.inp() and b1.inp() == a2.inp() )

This answer说:

The keys in a map a and b are equivalent by definition when neither a < b nor b < a is true.

class SomeClass
{
vector <int> m_inputs;
public:
//constructor, setter...
vector<int> inp() {return m_inputs};
}

typedef pair < SomeClass, SomeClass > InputsPair;
typedef map < InputsPair, size_t, MyPairComparator > InputsPairCounter;

所以问题是,如何使用映射比较器定义两对的等价性。我尝试连接一对中的两个 vector ,但这导致 (010,1) == (01,01),这不是我想要的。

struct MyPairComparator
{
bool operator() (const InputsPair & pair1, const InputsPair pair2) const
{
vector<int> itrc1 = pair1.first->inp();
vector<int> itrc2 = pair1.second->inp();
vector<int> itrc3 = pair2.first->inp();
vector<int> itrc4 = pair2.second->inp();
// ?
return itrc1 < itrc3;
}
};

最佳答案

I want to use a map to count pairs of input vectors. If there is a better data structure for this purpose, please tell me.

使用 std::unordered_map由于 2 个原因,可以考虑改为:

  • 如果正确实现哈希,它可能比 std::map 更快

  • 你只需要实现散列和operator==而不是 operator< , 和 operator==在这种情况下是微不足道的

有关如何为 std::vector 实现哈希的详细信息可以查到here .在您的情况下,可能的解决方案是将两个 vector 合并为一个,对其进行排序,然后使用该方法计算哈希值。这是一个简单的解决方案,但会产生许多哈希冲突并导致性能下降。要提出更好的替代方案需要了解所使用的数据。

关于c++ - c++中一对对象的映射比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46957280/

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