- ベストアンサー
vectorのイテレータを大小比較する方法を教えてください。
vectorのイテレータを大小比較する方法を教えてください。 distance(ita, itb) の返り値の正負で判定できるかと 思ったのですが、itb > ita じゃないとエラーになります。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
begin()の戻り値とitaを引数にdisitance関数を読んだ結果と begin()の戻り値とitbを引数にdisitance関数を読んだ結果を比較してはどうでしょうか? std::vector<int> v; for (int i = 1; i <= 10; ++i) v.push_back(i); std::vector<int>::iterator ita, itb; ita = v.begin(); ++ita; itb = v.begin(); ++itb; ++itb; ++itb; if (std::distance(v.begin(), ita) < std::distance(v.begin(), itb)) { // itaよりitbが後ろにある }
その他の回答 (3)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
ita, itb が同じvectorに紐付いているなら No.2 の方法で可能です。 # 時間計算量はO(N)となりますけども。 それ以外では無理。というかナンセンス。二つのポインタの大小比較に意味がないのと同様。
お礼
回答ありがとうございます。 ita, itb が同じvectorに紐付いているので No.2 の方法で試してみます。
- Tacosan
- ベストアンサー率23% (3656/15482)
ちなみにですが, 「イテレータの前後関係を調べたい」, つまり「ita と itb のうちより前の要素を指しているのはどちらか」を知りたいんだとしたら, あまりにも考えすぎ. std::vector<T>::iterator はランダムアクセス可能なので, もっと単純に (かつ素直に) 考えれば「適切な方法」を思いつくはずです.
お礼
回答ありがとうございます。 vectorならita>itb ? が使えました。
- Tacosan
- ベストアンサー率23% (3656/15482)
「イテレータの大小比較」の結果はどうなってほしいのですか?
お礼
回答ありがとうございます。 「イテレータの大小比較」というより、どちらがより前の要素を示しているかを知りたいです。
お礼
回答ありがとうございます。 実はイテレータはvectorじゃなくlistでした。 vectorなら演算子>が使えますが、listではダメなのでこのdistanceを使った方法でためしてみます。