获取元素在向量中的位置索引

时间:2013-05-29 10:05:09

标签: c++ vector

g ++(GCC)4.7.2

我有以下载体

vector<Observer> observers;

我将使用这个来推进向量:

observers.push_back(ob);

我将把10个观察者推向载体。但是,我需要从矢量中删除一个。但是,因为我不知道观察者在向量中的位置。我怎样才能获得它的索引,以便我可以使用索引将其删除?

我需要获取索引,以便我可以使用erase

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

非常感谢任何建议,

6 个答案:

答案 0 :(得分:4)

您可以使用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);
}

答案 1 :(得分:3)

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

答案 2 :(得分:2)

std::find应该适用于此。 std::find(observers.begin(), observers.end(), ob)

答案 3 :(得分:0)

真的 难吗?

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多个方法)

答案 4 :(得分:0)

如果您知道观察员姓名

,也许应该使用std:map

答案 5 :(得分:-1)

你可以使用“std :: find”,但也许你根本不需要“矢量”。也许您应该考虑使用“set”容器。当指数不是重要的时候,它是一种合法的选择。