• ベストアンサー

vectorのイテレータを大小比較する方法を教えてください。

vectorのイテレータを大小比較する方法を教えてください。 distance(ita, itb) の返り値の正負で判定できるかと 思ったのですが、itb > ita じゃないとエラーになります。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

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が後ろにある }

zuntac
質問者

お礼

回答ありがとうございます。 実はイテレータはvectorじゃなくlistでした。 vectorなら演算子>が使えますが、listではダメなのでこのdistanceを使った方法でためしてみます。

その他の回答 (3)

回答No.4

ita, itb が同じvectorに紐付いているなら No.2 の方法で可能です。 # 時間計算量はO(N)となりますけども。 それ以外では無理。というかナンセンス。二つのポインタの大小比較に意味がないのと同様。

zuntac
質問者

お礼

回答ありがとうございます。 ita, itb が同じvectorに紐付いているので No.2 の方法で試してみます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

ちなみにですが, 「イテレータの前後関係を調べたい」, つまり「ita と itb のうちより前の要素を指しているのはどちらか」を知りたいんだとしたら, あまりにも考えすぎ. std::vector<T>::iterator はランダムアクセス可能なので, もっと単純に (かつ素直に) 考えれば「適切な方法」を思いつくはずです.

zuntac
質問者

お礼

回答ありがとうございます。 vectorならita>itb ? が使えました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「イテレータの大小比較」の結果はどうなってほしいのですか?

zuntac
質問者

お礼

回答ありがとうございます。 「イテレータの大小比較」というより、どちらがより前の要素を示しているかを知りたいです。

関連するQ&A