繁体   English   中英

唯一指针向量:查找元素然后通过指针将元素旋转到向量的前面

[英]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);

笔记:

  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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM