我有一个std::shared_ptr容器。我想使用std::equal比较两个容器。类A定义了operator==。我希望equal使用元素的operator==比较它们是否相等,而不是使用shared_ptr中定义的operator==。
我需要创建一个函数或函数对象来传递给equal吗?还是有内置的更简单的东西(例如在中定义的内容)?
我需要创建一个函数或函数对象来传递给equal吗?还是有内置的更简单的东西(例如在中定义的内容)?
bool CompareA(const vector<shared_ptr<A>>& first,
const vector<shared_ptr<A>>& second) {
return equal(first.begin(), first.end(), second.begin(),
[](const shared_ptr<A>& item1, const shared_ptr<A>& item2) -> bool{
return (*item1 == *item2);
});
}
您需要一个函数或函数对象或Lambda表达式(由于您可以使用 std::shared_ptr
,因此已启用C++0x的某些部分)。
<functional>
中没有任何帮助,但是boost中有一些东西:间接迭代器
#include <iostream>
#include <vector>
#include <algorithm>
#include <memory>
#include <boost/iterator/indirect_iterator.hpp>
int main()
{
std::vector<std::shared_ptr<int>> v1;
std::vector<std::shared_ptr<int>> v2;
v1.emplace_back( new int(1) );
v2.emplace_back( new int(1) );
bool result =
std::equal( boost::make_indirect_iterator(v1.begin()),
boost::make_indirect_iterator(v1.end()),
boost::make_indirect_iterator(v2.begin()));
std::cout << std::boolalpha << result << '\n';
}
<functional>
中看到的一切都取决于拥有正确的比较类型,这意味着如果您不想比较指针本身,那么您需要以某种方式对这些指针进行解引用以获得它们所指向的对象... 我没有看到STL中任何自动为您执行此解引用的助手。