gpt4 book ai didi

C++如何检查N个对象中的一些对象是否相等

转载 作者:行者123 更新时间:2023-11-30 01:07:30 25 4
gpt4 key购买 nike

我有一些 C++ 对象,我想检查其中一些对象是否相等。

bool IsEqual(const Board& b)
{
if( b.From() != from_ )
return false;

if (b.To() != to_ )
return false;

if( b.Selection() != selection_ )
return false;

return true;
}

我的对象由一些整数(from_、to_、selection_)组成,该类提供了 IsEqual 方法来比较两个对象。

调用 obj1.IsEqual(obj2)如果两个对象具有相同的值,则返回 true。

但是我如何比较 N 个对象呢?是否可以push_back反对 std::vector<Board>并使用 std::unique

最佳答案

将对象放在一个集合中。完成后,集合将只包含唯一的对象。

您可以选择 std::setstd::unordered_set ,具体取决于您拥有的对象数量和比较功能的成本。

std::set需要一个比较函数(operator<)。 O(N*logN) 复杂度。

std::unordered_set需要一个散列函数和相等函数(std::equal_to 对您的对象进行 2 个 const 引用,std::hash 对一个对象进行 const 引用)。 O(N) 复杂度。

注意。双嵌套循环的复杂度为 O(N2)。

NB2。 std::unique需要对 vector 进行排序,因为它只比较相邻元素。

示例比较函数:

    bool operator< (const Board& b) const {
if (from_ < b.from_)
return true;
if (from_ > b.from_)
return false;
if (to_ < b.to_)
return true;
if (to_ > b.to_)
return false;
if (selection_ < b.selection_)
return true;
return false;
}

关于C++如何检查N个对象中的一些对象是否相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44421893/

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