std::list<T,Allocator>:: merge
|
void
merge
(
list
&
other
)
;
|
(1) | (constexpr C++26以降) |
|
void
merge
(
list
&&
other
)
;
|
(2) |
(C++11以降)
(constexpr C++26以降) |
|
template
<
class
Compare
>
void merge ( list & other, Compare comp ) ; |
(3) | (constexpr C++26以降) |
|
template
<
class
Compare
>
void merge ( list && other, Compare comp ) ; |
(4) |
(C++11以降)
(constexpr C++26以降) |
2つのソート済みリストを1つのソート済みリストにマージします。
- other が * this と同じオブジェクトを参照している場合、何も行わない。
- それ以外の場合、 other から * this へ全ての要素を転送する。 マージ後、 other は空になる。
この操作は安定しています:
- 二つのリストの等価な要素について、 * this の要素は常に other の要素より前に配置されます。
- * this と other の等価な要素の順序は変更されません。
- * this または other がコンパレータ comp に関して ソートされていない 場合。
- get_allocator ( ) == other. get_allocator ( ) が false の場合。
イテレータや参照は無効化されません。 * this から移動された要素へのポインタと参照、およびこれらの要素を参照するイテレータは、 other ではなく * this の同じ要素を参照します。
|
目次
1パラメータ
戻り値(なし) 例外何らかの理由で例外がスローされた場合、これらの関数は何も効果を持ちません( strong exception safety guarantee )。ただし、例外が比較操作から発生した場合は除きます。 計算量other が * this と同じオブジェクトを参照している場合、比較は実行されません。 それ以外の場合、 N 1 を std:: distance ( begin ( ) , end ( ) ) とし、 N 2 を std:: distance ( other. begin ( ) , other. end ( ) ) とする:
1,2)
最大
N
1
+N
2
-1
回の比較を
operator
<
を使用して行う。
3,4)
最大で
N
1
+N
2
-1
回の比較関数
comp
の適用。
例
このコードを実行
#include <iostream> #include <list> std::ostream& operator<<(std::ostream& ostr, const std::list<int>& list) { for (const int i : list) ostr << ' ' << i; return ostr; } int main() { std::list<int> list1 = {5, 9, 1, 3, 3}; std::list<int> list2 = {8, 7, 2, 3, 4, 4}; list1.sort(); list2.sort(); std::cout << "list1: " << list1 << '\n'; std::cout << "list2: " << list2 << '\n'; list1.merge(list2); std::cout << "merged:" << list1 << '\n'; } 出力: list1: 1 3 3 5 9 list2: 2 3 4 4 7 8 merged: 1 2 3 3 3 4 4 5 7 8 9 不具合報告以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
関連項目
| ||||||||||||||||||||||||||||||||||||||||||||