gpt4 book ai didi

c++ - 删除 vector 中的对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:19:36 27 4
gpt4 key购买 nike

我正在尝试删除对象 vector 中的一个元素。 vector 中充满了 Object 的实例,在某些时候,我想删除 vector 中的某个元素而不是通过索引,而是通过元素本身。

一个简单的例子是:

std::vector< string > strVector;
strVector.push_back( "abc" );
strVector.push_back( "def" );
strVector.push_back( "ghi" ); // So strVector should contain "abc", "def", and "ghi"

如何从该 vector 中删除“ghi”?请注意,我不知道该 vector 中“ghi”的位置。

// Something like this. Assume strVector = [ "abc", "cba", "ccb", "bac", "aaa" ]
strVector.removeElement( "ccb" );

一个与我正在从事的工作更相关的示例:

class MyClass {
std::vector< Object > myObjVector;
void main( ARGS ) {
for ( int i = 0; i < 10; i++ ) {
Object myObject = Object( );
myObjVector.push_back( myObject );
}

int j = getANumber( ); // j could be any number within the size of the vector
Object myOtherObject = myObjectVector.at( j );

// How do I erase myOtherObject (which is an object inside the vector) ?
removeFromVector( myOtherObject );
}
}

我希望问题很清楚。提前致谢。

编辑:我明白了,感谢所有回答的人。诀窍是给类一些唯一的东西来标识它(比如名称或标签,只要它们保证是唯一的)然后使用 erase-remove idiom从数组中删除对象。

最佳答案

如果您的用例没有重复项,那么您最好使用 std::set并使用 std::set::erase这需要一个值。

std::set< string > strSet;
strSet.insert( "abc" );
strSet.insert( "def" );
strSet.insert( "ghi" );
strSet.insert( "ccb" );

strSet.erase("ccb");

如果您需要处理重复项,则必须指定所需的删除行为。它应该删除一个或所有与某个值匹配的元素吗?您是否关心保留剩余元素的顺序?如果您需要使用 vector ,请访问 erase-remove idiom .但请注意 std::vector::erase具有线性时间复杂度,而 std::set::erase 的相关变体具有对数时间复杂度。 erase-remove 将删除所有 等于给定值的元素。

注意:如果您想使用 std::set对于用户定义的类型,您必须提供小于 bool operator<(const UserType&) const或比较函数或仿函数,实现 strict weak ordering .

关于c++ - 删除 vector 中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11773787/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com