Consider the following program:
#include <cstdlib>
#include <iostream>
#include <set>
#include <map>
#include <algorithm>
#include <iterator>
#include <utility>
using namespace std;
int main()
{
typedef pair<int, int> p_type;
multiset<p_type> c1;
c1.insert(make_pair(0, 2));
c1.insert(make_pair(0, 0));
c1.insert(make_pair(0, 1));
c1.insert(make_pair(2, 3));
multimap<int, int> c3;
c3.insert(make_pair(5, 0));
c3.insert(make_pair(0, 0));
c3.insert(make_pair(3, 2));
c3.insert(make_pair(0, -1));
c3.insert(make_pair(1, -1));
multimap<int, int> dest;
merge(c1.begin(), c1.end(), c3.begin(), c3.end(),
inserter(dest, dest.begin()));
return EXIT_SUCCESS;
}
Suppose the above program is named z.cpp and is compiled as
g++ -std=c++98 -pedantic -Wall -Wextra z.cpp
Then I get compilation error for the line
merge(...)
z.cpp:32: instantiated from here
/usr/lib/gcc/i386-redhat-linux/3.4.3/../../../../include/c++/3.4.3/
bits/stl_algo.h:2979: error: no match for 'operator<' in '(&__first2)-
std::_Rb_tree_iterator<_Tp>::operator* [with _Tp = std::pair<const
int, int>]() < (&__first1)-
std::_Rb_tree_const_iterator<_Tp>::operator* [with _Tp =
main()::p_type]()'
Kindly help me to fix this compilation error.
typeof "multiset<p_type>::value_type" == p_type == pair<int, int> ... Type1
typeof "multimap<int, int>::value_type" == pair<const int, int> ... Type2
Type1. Type2 are two different specialization of template class pair