[英]Vector of unique pointers: Finding and then rotating an element to the front of a vector by pointer
假设我有一个指向对象的唯一指针的std::vector
。
#include <memory>
struct MyObject {
};
std::vector<std::unique_ptr<MyObject> myObjects;
现在假设该向量填充了一些对象,并且我想将特定指针旋转到前面。 我尝试使用这样的find_if
函数来查找枢轴:
#include <algorithm>
void rotate_to_front(MyObject * myobject){
auto pivot = std::find_if(std::begin(myObjects), std::end(myObjects), [myObject](const MyObject & memberObject){
return myObject == memberObject;
});
}
但是clang
deduced conflicting types for parameter 'Element'
抛出了deduced conflicting types for parameter 'Element'
。
找到支点后,我想使用std::rotate
将其移到前面。
std::rotate(std::begin(myObjects), pivot, pivot + 1);
std::find
而不是std::find_if
做到这std::find_if
? 我也无法让它工作。要编译std::find_if()
,lambda 的参数必须匹配std::vector
中的对象类型,即std::unique_ptr<MyObject>
而不是MyObject
,或者可以隐式转换为参数类型,即在这种情况下是不可能的。 所以,正确的方法是:
auto pivot = std::find_if(std::begin(myObjects), std::end(myObjects),
[myObject](const std::unique_ptr<MyObject> & memberObject){
return myObject == memberObject.get();
});
有没有办法用 std::find 而不是 std::find_if 来做到这一点?
为此, std::unique_ptr
必须提供一个operator==
来比较原始指针,事实并非如此,因此不,您必须自己提供一个谓词。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.