質問

私は持っています std::list< std::pair<std::string,double> >, 、私が知っていることは、に従ってソートされています std::string element.

たくさんのことをしたいので std::find_if に基づく std::string 要素、私は信じていますa std::map<string,double,MyOwnBinaryPredicate>lower_boundupper_bound より適切です。

実際、私がしたいということです insert の要素 std::map 効率的な方法で。だから私は追加のイテレーターを使って insert もっと早く。

最も簡単な方法は、 const_reverse_iterator を通過する std::list そして、それを使用します begin()std::map.

このようにしますか、それとも悪い考えですか?

ありがとう!

役に立ちましたか?

解決

すでにソートされたリストがある場合、それは述語に従ってソートされています Predicate, 、次のことを行うことができます。

std::list< std::pair<std::string, double> > sorted_list;
std::map<string, double, Predicate> map(sorted_list.begin(), sorted_list.end());

map コンストラクターには、リストが既にソートされている場合、o(n*log n)の場合、線形時間の複雑さがあります。その後、他のものと同じように、マップを直接作業できます。

後で結果をリストに戻したい場合は、反対のことを行うことができます。

sorted_list.assign(map.begin(), map.end());

他のヒント

std :: copy and std :: inserterを使用できます。

std::copy(the_list.begin(),the_list.end(),std::inserter(the_map,the_map.begin()));  

リスト<Paile>のイテレーターには、<x、y>のiteratorsをmap of of fore bale typeが互いに互換性があるためです。

リストを繰り返して、すべてのペアをマップに挿入するか、Luther Blissettが説明したきちんとした方法を使用します。
私があなたがやろうとしていることを理解していないという事実は、それが読み取れないコードにつながるか、あなたがはるかに離れていることを意味します。
なぜあなたはそれをこのようにしているのですか?
そもそもリストの代わりにマップを返すようにコードを変更できますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top