• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:std::lower_boundについて)

std::lower_boundについて

このQ&Aのポイント
  • std::lower_boundを使用して変数pをソート済み配列IntArrayに挿入する方法が分からない
  • lower_boundの使用方法やコードの修正方法を教えてほしい
  • 特殊ケースでの問題のため、int* pをintに修正したり、挿入後に再度ソートする方法は不要

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

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

> 上記のように使用すればこの場合だと変数pを挿入する位置が返ってくるのでしょうか? やってみればわかることかと。 #include <iostream> #include <algorithm> #include <vector> bool cmp( const int* lhs, const int* rhs ) {   return *lhs < *rhs; } int main() {   std::vector<int*> IntArray;   IntArray.push_back( new int( 0 ) );   IntArray.push_back( new int( 2 ) );   IntArray.push_back( new int( 1 ) );   IntArray.push_back( new int( 6 ) );   IntArray.push_back( new int( 5 ) );   IntArray.push_back( new int( 7 ) );   std::sort(IntArray.begin(), IntArray.end(), &cmp);   int* p = new int(4);   std::vector<int*>::iterator pos    = std::lower_bound(IntArray.begin(), IntArray.end(), p, &cmp);   IntArray.insert(pos, p);   for ( int i = 0; i < IntArray.size(); ++i ) {    std::cout << *IntArray[i] << std::endl;   } }

0xEF
質問者

お礼

申し訳ありません。 先ほど試したところ、確かに挿入したいところのイテレータが返ってきていました。 std::lower_boundが中でどのような処理をやっているのかいまいちわからず、他の作業にいっぱいいっぱいで頭で考えただけで手を動かすことをしなかったことは反省したいと思います。 第3引数でポインタを渡しているのでポインタで比較されてしまうと考えていたのですが内部比較は第4引数で渡された関数が使用されるのですね・・・。 ありがとうございました。

その他の回答 (1)

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

おおざっぱにいえば lower_bound で返ってくるのは 指定した値より小さくない最初の位置 だから, これでいけるはずです. lower_bound で返ってきたところにいれて, それ以降をうしろにずらせばいいと思う.

0xEF
質問者

お礼

ありがとうございます。 No2さんの回答をもとに実行してみたところ期待通りの動作をいたしました。 今回の件で頭で考えただけで作った気になっていた自分を戒めたいと思います。 ありがとうございました。

関連するQ&A