Predicate Version of merge
Muestra cómo utilizar la versión del predicado de la función de biblioteca de (STL) plantillas estándar de combinación en Visual C++.
template<class InputIterator1,
class InputIterator2,
class OutputIterator
class Compare> inline
OutputIterator merge(
InputIterator1 First1,
InputIterator1 Last1,
InputIterator2 First2,
InputIterator2 Last2,
OutputIterator Result,
Compare Compare
)
Comentarios
[!NOTA]
La clase y los nombres de parámetro en el prototipo no coincide con la versión del archivo de encabezado.Algunos se han modificado para mejorar la legibilidad.
El algoritmo de combinación combina dos secuencias ordenadas: [First1.Last1) y [First2.Last2) en una única secuencia clasificada que comienza en Result.Esta versión se supone que los intervalos [First1.Last1) y [First2.Last2) se ordenan mediante la función de compare .Si ambos intervalos contienen valores iguales, el valor del primer intervalo se almacenará primero.El resultado de combinar intervalos superpuestos es indefinido.
Ejemplo
// mergePV.cpp
// compile with: /EHsc
//
// Illustrates how to use predicate version of the merge function.
//
// Functions:
// merge : Merge two sorted sequences
// into a single sorted list.
// disable warning C4786: symbol greater than 255 character,
// okay to ignore
#pragma warning(disable: 4786)
#include <iostream>
#include <algorithm>
#include <vector>
#include <list>
#include <deque>
using namespace std ;
int main()
{
const int MAX_ELEMENTS = 8 ;
// Define a template class vector of int
typedef vector<int> IntVector ;
//Define an iterator for template class vector of ints
typedef IntVector::iterator IntVectorIt ;
IntVector NumbersVector(MAX_ELEMENTS) ;
IntVectorIt startv, endv, itv ;
// Define a template class list of int
typedef list<int> IntList ;
//Define an iterator for template class list of ints
typedef IntList::iterator IntListIt ;
IntList NumbersList ;
IntListIt first, last, itl ;
// Define a template class deque of int
typedef deque<int> IntDeque ;
//Define an iterator for template class deque of ints
typedef IntDeque::iterator IntDequeIt ;
IntDeque NumbersDeque(2 * MAX_ELEMENTS) ;
IntDequeIt itd ;
// Initialize vector NumbersVector
NumbersVector[0] = 4 ;
NumbersVector[1] = 10;
NumbersVector[2] = 70 ;
NumbersVector[3] = 10 ;
NumbersVector[4] = 30 ;
NumbersVector[5] = 69 ;
NumbersVector[6] = 96 ;
NumbersVector[7] = 100;
startv = NumbersVector.begin() ; // location of first
// element of NumbersVector
endv = NumbersVector.end() ; // one past the location
// last element of NumbersVector
// sort NumbersVector, merge requires the sequences
// to be sorted
sort(startv, endv, less<int>()) ;
// print content of NumbersVector
cout << "NumbersVector { " ;
for(itv = startv; itv != endv; itv++)
cout << *itv << " " ;
cout << " }\n" << endl ;
// Initialize vector NumbersList
for(int i = 0; i < MAX_ELEMENTS; i++)
NumbersList.push_back(i) ;
first = NumbersList.begin() ; // location of first
// element of NumbersList
last = NumbersList.end() ; // one past the location
// last element of NumbersList
// print content of NumbersList
cout << "NumbersList { " ;
for(itl = first; itl != last; itl++)
cout << *itl << " " ;
cout << " }\n" << endl ;
// merge the elements of NumbersVector
// and NumbersList and place the
// results in NumbersDeque
merge(startv, endv, first, last, NumbersDeque.begin(), less<int>()) ;
cout << "After calling merge\n" << endl ;
// print content of NumbersDeque
cout << "NumbersDeque { " ;
for(itd = NumbersDeque.begin();
itd != NumbersDeque.end(); itd++)
cout << *itd << " " ;
cout << " }\n" << endl ;
}
Output
NumbersVector { 4 10 10 30 69 70 96 100 }
NumbersList { 0 1 2 3 4 5 6 7 }
After calling merge
NumbersDeque { 0 1 2 3 4 4 5 6 7 10 10 30 69 70 96 100 }
Requisitos
encabezado: <algoritmo>