![]() |
1
3
你可以看看 find_if 正如jpalecek建议的,然后使用 distance 要查找从find_if和unitcollection.begin()返回的迭代器之间的距离,该距离应该是列表中元素的索引。 对于谓词,可以编写如下函数对象:
然后这样使用:
或者至少我认为这是一种方法。 |
![]() |
2
4
不重要的评论您可以将访问函数更改为更简单的形式
现在我们来这里是为了什么
你最好去找
位置
元素而不是其索引。从元素的索引中获取元素是一个O(N)操作,而从元素的位置获取元素是一个O(1)操作。所以,在STL的帮助下,
STL确实有
但如果你没有动力如果您的项目中还没有Boost,那么您真的应该安装它。如果标准库是C++的妻子,那么Boost是C++的年轻情人。他们应该都在那里,相处得很好。 已经说过,您可以将函数提取到一个独立的函数对象中,正如Peter已经提到的那样:
那么,你可以打电话
还有一点性能考虑还有一件事:我不知道ucode是什么样子的,但是如果它们很大,那么你可以通过维护这些字符串的散列来加快速度,这样在你的搜索谓词中,你只比较散列。散列可以是规则整数:比较整数非常快。 还有一件事:如果您经常运行这个搜索过程,您也可以考虑更改容器类型,因为这确实是一个昂贵的过程:按照列表长度的顺序。 |
![]() |
3
3
您的谓词可能看起来像:
其他一些评论: isUnit函数最好采用字符串by(const)引用,以避免不必要的复制。
你说你想返回一个项目的索引;对于链接列表来说,这通常是不明智的,因为你不能按索引返回项目。如果你想通过索引来处理它们,也许
|
![]() |
4
1
看一看
如果你可以使用Boost,你可以使用它
或者你可以自己制作函数。
或者,如果你想要索引(如果是否定的,请看 here ):
|
|
Julia · 矢量中相加为总和S的值的数量 2 年前 |
![]() |
C_Rod · 在模板方法中确定STL容器中项目的数据类型 3 年前 |
![]() |
quantumwell · 将空向量放入std::map() 7 年前 |
![]() |
OutOfBound · 对未初始化内存使用算法的优点 7 年前 |
![]() |
DarthRubik · 在使用列表删除之后,迭代器如何不无效 7 年前 |