获取元素在vector中的位置的索引

Get the index of where the element is in a vector

本文关键字:位置 索引 vector 元素 获取      更新时间:2023-10-16

g++ (GCC) 4.7.2

我有以下向量
vector<Observer> observers;

我将把它推到向量上,用如下方式:

observers.push_back(ob);

我将把大约10个观察者推到向量上。然而,我需要从向量中去掉一个。但是,因为我不知道观察者在向量的哪个位置。我怎样才能得到它所在位置的索引,以便我可以使用索引来删除它?

我需要得到索引,这样我就可以用erase

删除它
observers.erase(observers.begin() + index); 

非常感谢您的建议,

您可以使用find算法之一(可能是find_if)。如果它符合你的条件,它将返回一个迭代器到正确的元素,你可以直接给erase()

std::vector<Observer>::iterator toErase;
//Pick one of the following
toErase = std::find_if(observers.begin(), observers.end(),/*your predicate here*/);
toErase = std::find(observers.begin(), observers.end(), observerToDelete);
//If we found an observer matching the criteria
if(toErase != observers.end()){
    observers.erase(toErase);
}

您可以使用std::find,但您需要为您的Observer类重载相等==操作符,以便程序知道如何比较您的对象

std::find应该可以解决这个问题。std::find(observers.begin(), observers.end(), ob)

真的很难吗?

int i = 0;
while (i < observers.size() && observers[i] != observerToDelete)
    i++;
// Replace the != with any other way of comparing observers
// if needed
if (i < observers.size())
    // found

(除了提到的std::find,迭代器和1000多个方法来完成它)

如果你知道观察者的名字,也许你应该使用std:map

您可以使用"std::find"来表示它,但也许您根本不需要"vector"。也许你应该考虑使用"set"容器。当索引不重要时,它是一个合适的选择。