
No.1ベストアンサー
- 回答日時:
二分木の仕組み上、ルートから見ていかないとわかりませんよね?
int cnt;
std::set<int>::iterator it;
for( it = s.begin() , cnt = 1 ; it != s.end() ; ++it , cnt++ ){
if ( *it == 5 ){
std::cout << cnt << "番目" << std::endl;
}
}
とする必要があります。
>s.find(5)-s.begin();
これは無理です。
findもbeginもsetのiterator
が戻り値です。
vector等ではiteratorに
マイナス演算子が定義されている為以下のような記述が可能なのです。
std::vector<int> v;
int cnt = v.end()-v.begin();
setのiteratorにマイナス演算子は定義されていません。
(インクリメント++やデクリメント--は定義されています。)
>二分木の仕組み上、ルートから見ていかないとわかりませんよね?
やっぱそうですか....
操作を何回も繰り返して行いたいので、これ意外の方法があれば、と思った
のですが・・・
そもそも set 使うことが良くないのかとも思ってきました.
No.3
- 回答日時:
std::set の実装が二分木であろうと、公開されたインターフェース以外を仮定してコードを書いてはいけません。
どうしても std::set が使いたいなら
count_if( s.begin(), s.end(), bind2nd( less_equal<int>(), 5 ) )
とかかな?
>std::set の実装が二分木であろうと、公開されたインターフェース以外を仮定してコードを書いてはいけません。
そうかもしれないです。
この操作を何回も行いたいので、できれば O(1) で知りたかったのですが。
そうすると set を使うのはあまり良くないのかも、とも思ってきました。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
最早開始時間と最遅完了時刻を...
-
【C++】関数ポインタの使い方
-
C言語 エラーの原因がわからな...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語での奇数の和
-
Haskellで関数を合成しようとす...
-
式は定数値が必要です」という...
-
C言語での引数の省略方法
-
未解決の外部シンボル _printf...
-
CStringの配列要素を関数で受け...
-
「指定されたキャストは有効で...
-
return 1L
-
複数桁10進数の*桁目だけを抽出...
-
任意の文字列のアルファベット...
-
入力された数字を大きい順に並...
-
C言語のプログラム作成について
-
【C++】行列データの読み込み
-
2次元配列とポインタの引数受け...
-
数字列を3桁ごとにカンマで区切...
-
C言語 配列と関数の練習問題
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
#define _CRT_SECURE_NO_WARNIN...
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
【C++】関数ポインタの使い方
-
C言語 エラーの原因がわからな...
-
複数桁10進数の*桁目だけを抽出...
-
return 1L
-
if と配列の組み合わせ
-
ラップ関数とはどんなものですか?
-
式は定数値が必要です」という...
-
数字列を3桁ごとにカンマで区切...
-
実数の整数部,小数部の取得
-
C言語でDxlibを使って3x3の奇数...
-
プログラムについて(UNIX)
-
acceptをalarmでタイムアウトさ...
-
C言語の課題です
-
エラー 添字が付けられた値が、...
-
CStringの配列要素を関数で受け...
-
最早開始時間と最遅完了時刻を...
-
入力された数字を大きい順に並...
おすすめ情報