[英]How to get the rank of an element in vector in C++
我需要獲得C ++中容器元素的等級(位置索引+ 1),如vector
或list
。 有沒有方便的方法呢? 我本可以基於nth_element
進行測試以找到排名。 或者我可以排序並進行二分搜索以找到排名。 但在最壞的情況下,所有這些似乎都不是很有效。 我想獲得O(lgn)復雜性,並盡可能使用STL算法。
如果您的容器具有隨機訪問迭代器(例如vector)並進行排序,則可以使用std::lower_bound()
算法來獲取O(log n)復雜度中的元素索引。 例如:
std::vector<int> v({10,20,30,30,20,10,10,20});
std::sort(v.begin(), v.end());
auto iter = std::lower_bound(v.begin(), v.end(), 20);
std::cout << "index " << int(iter - v.begin()) << std::endl;
(我使用C ++ 11語法來保持代碼簡短,但你應該明白這一點)。
請注意,您可以按排序方式將元素插入向量,因此在查找索引之前無需進行排序。
你似乎不太可能在這里找到比線性搜索更有效的東西。 最糟糕的情況必然是你將所有元素與你搜索的內容進行比較 - 這正是線性搜索給你的。
這可能是不整潔的。
你可以使用向量中的元素在內存中連續的事實。
所以你要做的就是
1)獲取感興趣元素的迭代器地址
2)用vector.begin()減去以獲得總內存
3)除以一個元素的大小
這應該給你的位置(或排名)。
這是假設元素是固定大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.