インデックス別にC ++ STD :: Setのメンバーを取得する -- c++ フィールド と stl フィールド 関連 問題

getting a C++ std::set's members by index












1
vote

問題

日本語

SETの1つのSTLアルゴリズムを使用する方法は、セット内のインデックス位置を使用してセットのメンバーを取得する方法は?

私は以下のようなユーティリティ方法を使うことができましたが、これがSTLの一般的な形式ですでに存在すると考える必要があります:

<事前> <コード> ElementPtr elementAt(int elementNumber) { list<ElementPtr>::iterator elementIt = elements.begin(); for (int counter = 0; counter < elementNumber && elementIt != elements.end(); counter++, elementIt++) { } return *elementIt; }
英語

Is there a way to use one of the stl algorithms define in to get a member of a set using its index position in the set?

I could use a utility method like the one below, but I've got to think this exists already in some generic form in the stl:

ElementPtr elementAt(int elementNumber) {     list<ElementPtr>::iterator elementIt = elements.begin();     for (int counter = 0; counter < elementNumber && elementIt != elements.end(); counter++, elementIt++)      {     }      return *elementIt; } 
</div
     
 
 

回答リスト

3
 
vote
<事前> <コード> #include <iterator> list<ElementPtr>::iterator elementIt = elements.begin(); std::advance(elementIt, elementNumber); x = *elementIt;

これは本質的にあなたのコードをしているものです。

しかし、これを行いたいという事実は、データ構造が間違っていることを示している可能性が最も高いです。セットはこのように処理されるようには設計されていません。

 
#include <iterator>  list<ElementPtr>::iterator elementIt = elements.begin(); std::advance(elementIt, elementNumber); x = *elementIt; 

Which does essentially what your code does.

But the fact that you want to do this most likely indicates that you're data structures are wrong. Sets are not designed to be processed like this.

</div
 
 
 
 
2
 
vote

バイナリツリーまたはハッシュテーブルとして実装されている場合は使用可能なインデックスメカニズムはありません。どちらもセットに共通です。

 

There isn't a usable index mechanism if it's implemented as a binary tree or a hash table, both of which are common for sets.

</div
 
 
2
 
vote

実際に右のコンテナタイプを使用していますか?代わりにソートベクトルを使用することを検討してください。

 

Are you actually using the right container type? Consider using a sorted vector instead.

</div
 
 
2
 
vote

boost.multiindexを使ってこれを行うことができます。 同じ基礎となるデータに順序付けインデックスとランダムアクセスインデックスの両方を作成する。

 

You could do this using Boost.MultiIndex to build both ordering and random access indices on the same underlying data.

</div
 
 
1
 
vote

私はそう信じていません、「index-of」は、一般化された std::set に関しては意味がないので。セットが一度作成(および初期化されていて変更しない)がない限り、演算子の索引への呼び出しの結果が常に予測可能な結果を​​返すことを保証することはできません。

 

I don't believe so, as "index-of" doesn't really make sense in terms of a generalized std::set. Unless your set is constructed (and initialized) once and never changed, then you cannot guarantee that the results of calls to the index-of operator would always return a predictable result.

</div
 
 
1
 
vote

あなたが得ることになる最善のものはイテレータです。セットは、値であるコンテナです(well、ハッシュテーブル内の参照の詳細)。たぶん私たちがあなたがしようとしていたものを知っていたら私たちはあなたの質問に答えることができました。

あなたはセットを配列に相当すると思います。それらはかなり異なる構造的に構造化されています、数値指標は適用されません。

 

The best you are going to get is an iterator. Sets are containers where the value is the index (well, more of a reference in a hash table). Maybe we could better answer your question if we knew what you were trying to do.

I think you are equating a set to an array; they are structured quite differently, a numerical index does not apply.

</div
 
 
0
 
vote

セットと言いますが、コードは実際にはリストを示します。 2つは同じではありません。集合は、それらの要素がそれらの値によって検索されるように設計されています。リストは、 std::advance を使用してそれらを進めることができます。

 

You say set, but your code actually indicates list. The two are not the same. Sets are designed to have their elements retrieved by their value. Lists, you can just advance along them using std::advance.

</div
 
 
0
 
vote

セットへの数値インデックスのようなものはありません。代わりにベクトルを使用する必要があります。さらに、セット内の「N番目の項目を取得」することができれば、セットが変更された後に(同じ場所に)、それがあると保証されていません。

 

There is no such thing as a numerical index into a set. You need to use a vector instead. And what's more, if you do happen to "get the nth item" in the set, it is not guaranteed it will be there (in the same place) after the set is modified.

</div
 
 
 
 

関連する質問

23  「各」の携帯性のためのVisual C ++ "  ( Visual c for each portability ) 
最近では、Visual C ++ 2008(およびおそらく以前のバージョンもありますか?)をサポートして、反復を容易にするためにSTL Lists et alの db.content.find({authors: {$elemMatch: {slug: 'jo...

1  C#のIENUMERABLEをシミュレーションする方法を再開しますか?  ( Boost way of simulating cs ienumerable ) 
C#では、次のを実行できます。 <事前> <コード> class MyClass { private List<int> lst; public IEnumerable<int> Numbers { get { return lst; } } }...

1  このini構文解析コードを改善するのに役立ちます  ( Help improve this ini parsing code ) 
これは私が思い付くものです。この質問。私はそれに完全に満足していません、そして私はSTLとStreamsベースのプログラミングの私の使用を改善するのを助ける機会としてそれを見ました。 <事前> <コード> L2_WANTED = [A,B,C,D] L3_WA...

3  STL __MERGE_WITHOUT_BUFFERアルゴリズム?  ( Stl merge without buffer algorithm ) 
C ++ STLの __merge_without_buffer() で使用されているアルゴリズムのまともな高度な説明を取得できますか?いくつかの機能強化で、Dプログラミング言語でこのコードを再実装しようとしています。低レベルの詳細があまりにも多くの低レベル...

0  リストを使用してこのC ++コードを使用したセグメンテーション障害の理由は何ですか?  ( What is the reason for a segmentation fault with this c code using lists ) 
複雑なC ++コードをいくつか持っていますが、問題は構造のリストで push_back の実行に絞り込む: <事前> <コード> list<cache_page> cachedPages; void f() { cache_page cpage(a,...

1  STL Set_union大きいリストを持つ  ( Stl set union with big lists ) 
2つのがあります <事前> <コード> list<int> a (4,100); list<int> b (4,200); 集合としてソートされています: <事前> <コード> a.sort(); a.unique(); b.sort(); b.uniq...

2  std :: partial_sumでのオーバーフローを避けるための暗黙の宣伝  ( Implicit promotion to avoid overflow in stdpartial sum ) 
このコードは、中間結果の種類が宛先の種類に依存しないため、オーバーフローに悩まされます。 <事前> <コード> templatetags0 しかし、これは(GCC 4.2): <事前> <コード> templatetags1 templatetags2...

1  入力ファイル内の単語を追跡するためにマップを使用してC ++のヘルプが必要です  ( Need help with c using maps to keep track of words in a input file ) 
のテキストファイルを持っているとしましょう <事前> <コード> today is today but tomorrow is today tomorrow 地図を使用して繰り返される単語を追跡する方法は?そしてそれがどのラインを繰り返す? これまでのと...

1  segfaults sizeof(ベクトル[0])*ベクトル - > size()  ( Segfault when using sizeofvector0 vector size ) 
作業コードスニペットを考える <事前> <コード> glBufferData(GL_ARRAY_BUFFER, vertices->size() * sizeof(glm::vec3), &vertices->front(), GL_STATIC_DR...

11  STD :: Random_ShuffleのRNGとしてのBoost :: Randomを使用する  ( Using boostrandom as the rng for stdrandom shuffle ) 
MT19937乱数ジェネレータがBoost :: Randomから使用するプログラムを持っています。私はRANDOM_SHUHFHLEを実行する必要があり、これがこの共有状態から生成された乱数は、Mersenne Twisterの以前に生成された数字に関して...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有