【发布时间】:2013-03-13 00:39:38
【问题描述】:
STL 中有排序容器吗?
我的意思是:我有一个std::vector<Foo>,其中Foo 是一个定制类。我还有一个比较器,可以比较 Foo 类的字段。
现在,我正在代码中的某个地方:
std::sort( myvec.begin(), myvec.end(), comparator );
它将根据我在比较器中定义的规则对向量进行排序。
现在我想将Foo 类的元素插入到该向量中。如果可以的话,我只想写:
mysortedvector.push_back( Foo() );
然后向量会根据比较器将这个新元素放到它的位置。
相反,现在我必须写:
myvec.push_back( Foo() );
std::sort( myvec.begin(), myvec.end(), comparator );
这只是浪费时间,因为向量已经排序,我只需要适当地放置新元素。
现在,由于我的程序的性质,我不能使用 std::map<>,因为我没有键/值对,只有一个简单的向量。
如果我使用stl::list,我需要在每次插入后再次调用排序。
【问题讨论】:
-
std::set呢? -
如果你知道它会去哪里,你可以使用 insert()
-
@us2012,我查看了 std::set。问题是这些对象将呈现在一个网格中,用户可以在其中根据所有类成员对它们进行排序,并以他们认为合适的任何方式对其进行修改。由于 std::set 成员定义为 const,因此此容器不适合我。
-
@Igor 如果用户可以修改值,那么他们可以使容器未排序。这就是为什么
std::set的元素是const
标签: c++ sorting vector stl container-data-type