Mat*_*att 4 c++ equality shared-ptr stl-algorithm
我有一个std :: shared_ptr的容器.我想使用std :: equal来比较两个容器.A类有operator == defined.我希望等于比较每个元素是否等效使用其运算符==,而不是在shared_ptr中定义的元素.
我是否需要使函数或函数对象传递给相等的?或者是否有更简单的内置内容(如<functional>中定义的内容)?
您将需要一个函数或函数对象或lambda表达式(因为您可以使用std::shared_ptr
,您已经启用了C++ 0x的某些部分).
什么都没有<functional>
帮助你,但有一些东西在推动:间接迭代器
#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';
}
Run Code Online (Sandbox Code Playgroud)
您可以执行以下操作,假设您有一个支持 lambda 表达式的编译器并且没有任何项为空:
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);
});
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2490 次 |
最近记录: |