2017-04-23 1 views
-2

を作成します。私は速く設定するベクトルを変換する必要があるC++多重集合Iは、配列ソートするソートされたベクターから

tr.erase(); 
tr.insert(arrs.begin(), arrs.end());   

:私はこれを持って、私は多重集合

multiset<T*, sp_t_less<T>> tr; 

を持って

vector<T*> arrs; 

を(線形複雑さ)。 use stdやboost関数でこれを行うことはできますか?あなたの配列がすでにソートされている場合は

+0

セットは、一般的に良いアイデアではありません。 –

+0

あなたの質問は何ですか? –

+0

私は他の方法もありません。 –

答えて

0

、あなたはhintinsert -variantを使用することができ、エンド(参照multiset::insert)で検索を開始するために挿入操作を「伝える」:

iterator insert(iterator hint, const value_type& value) 

**複雑** ** 挿入がヒント直後の位置で行われる場合は償却された定数、それ以外の場合はコンテナのサイズの対数です。

したがって、およそ線形複雑で仕事をする必要があり、次のループのようなもの(arrsがソートされている場合):生のポインタの

for (auto t : arrs) { 
    tr.insert(tr.end(), t); 
} 
関連する問題