C++のコンテナの要素のランク(位置インデックス+ 1)をvector
またはlist
のように取得する必要があります。そうする便利な方法はありますか?私はランクを見つけるためにnth_element
に基づいてテストを行った可能性があります。または、私は並べ替え、ランクを見つけるためにバイナリ検索を行うことができます。しかし、これらのすべては、最悪の場合、非常に効率的ではないように見えます。私はO(lgn)の複雑さを得たいと思っており、可能であればSTLアルゴリズムを使っています。C++でベクトルの要素のランクを取得する方法
答えて
リニア検索よりも効率的な方法が見つかる可能性は非常に低いようです。最悪の場合は必然的に、すべての要素を検索対象と比較する必要があります。これがまさに線形検索によって得られるものです。
コンテナにランダムアクセスイテレータ(ベクターなど)があり、ソートされている場合は、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の構文を使用していますが、あなたのアイデアを得る必要があります)。
要素をソートされた方法でベクトルに挿入できるため、インデックスを検索する前にソートする必要はありません。
すでにベクトルにデータがあり、イテレータを使用している場合は、イテレータをベクトルの先頭(または最後)から減算して、その位置を取得する必要がありますソートされます - ランクです。
vector<int> myvector;
vector<int>::iterator it;
for (it=myvector.begin() ; something ; something)
*it++; //
int rank = it - myvector.begin();
すでにイテレータがある場合、ソートは関係ありません。とにかく、OPにはコンテナ内の要素に対するハンドルが一切ないことは明らかです。 –
これは不安定かもしれません。
ベクトルの要素がメモリ内で連続しているという事実を利用できます。
はそうあなたがしなければならないものを
1))興味
2の要素のイテレータアドレスを取得し、総メモリ
3を得るために)(vector.beginと減算です)1つの要素のサイズで割ります
これはあなたに位置(またはランク)を与えるはずです。
これは要素が固定サイズであると仮定しています。
- 1. OPENCV C++でベクトルのベクトルに要素を格納する方法
- 2. ベクトルの要素をArrayListに取得する方法
- 3. 3要素のベクトルをC++のベクトルにプッシュバックする方法は?
- 4. ベクトルの要素をC++で結合する方法
- 5. C#で要素のXML属性を取得する方法
- 6. Objective CのUIViewでUI要素「XPath」を取得する方法
- 7. ベクトルの要素をC++のスタックにコピーする方法
- 8. ベクトルの要素を印刷する方法C++
- 9. C#要素の図名を取得する方法 - エンタープライズアーキテクト
- 10. オブジェクトCで要素をxmlから取得する方法は?
- 11. 親要素と次の要素を取得する方法
- 12. 要素で子要素を取得する方法
- 13. iframe要素をC#で取得する
- 14. ベクトルの特定の要素の平均を取得する
- 15. ベクトル要素IDのC++
- 16. Sencha-touch:Ext.reg()で要素を取得/取得する方法
- 17. 別の要素内のidで要素を取得する方法JavaScriptコード
- 18. Reddit Postの対応するランクを取得する方法
- 19. DOM要素のプロパティをAngular 2の方法で取得する
- 20. jspでリストの最初の要素を取得する方法
- 21. MultiMapの値で要素のインデックスを取得する方法
- 22. OOP JavaScriptで「この」クリックで要素を取得する方法
- 23. Javascriptでiframe要素内の要素を取得する方法は?
- 24. numpy 2d配列の列のランクを取得する方法は?
- 25. Selenium - 要素とそのサブ要素のテキストの取得方法
- 26. PHP DOMDocument要素の取得方法は?
- 27. 要素の取得方法 - Imacros
- 28. jqueryの要素の子要素の配列を取得する方法
- 29. CノードのXDocumentから子ノード要素の値を取得する方法
- 30. jqueryで親要素のhref attrを取得する方法は?
コンテナをスキャンするよりも使いたい場合は、間違ったコンテナを選んだとします。少なくとも、すべてのコンテナタイプに最適な_catch-all_アプローチはありません。 –
えええええええええええええええええええええええええええええええええええええええええええええええええだしんだんだんだんだんだんだんだんだんだんだんだんだんだんだんだんだんだんだんだんだんだんだんだんだんだんだんだんだんじょうだんかんじゅうかんじゅんあなたは、それぞれのアイテムを潜在的に見ることなく、ベクターのようなコレクションでこれを達成することができるとはどのように考えていますか?これは実際にパフォーマンスの問題ですか?私はあなたがそれが証明されていれば、その仕事に間違ったデータ構造を使用しているとの結論に至りました。 –
@EdS .: "Q:方法は何ですか?" "A:方法を使用してください。"うーん。 –