获取元素在vector中的位置的索引
Get the index of where the element is in a vector
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"容器。当索引不重要时,它是一个合适的选择。
相关文章:
- 访问特定阵列位置/索引时出现分段错误
- 素数索引位置C程序
- 如何计算 3d 数组中的索引值在内存中的位置?如何计算字符**中的索引值在内存中的位置?
- GLES计划资源索引/位置与统一索引/位置
- 为字符串中的每个字符(不是字符位置!)分配唯一的索引
- 我可以将单个顶点索引与具有所有属性(位置、法线、texCoord)的顶点缓冲区一起使用吗?
- C++ std::map 如何按索引位置访问密钥
- C++ 提升日志位置(索引)格式对齐
- 如何返回索引位置而不是值
- C++如何在获取子字符串的索引位置后获取子字符串
- C++:写入 std::string 中的特定索引位置
- 二进制搜索返回其所属位置的索引
- 识别数组在C++中的最小索引位置
- 需要 std::set 元素的位置/索引
- 查找向量中的值索引位置
- 获取元素在boost::multi_index_container的顺序索引中的位置
- 正在将指针从数组值存储到原始数组索引位置
- 不同的结果取决于 for 循环的循环索引在C++中的位置
- 带有Overload[]运算符的C++MyInteger类,因此索引在位置i返回数字
- 2d查找重复元素/获取索引位置并计数重复项