ural 1100
把
1 2 16 3 11 2 20 3 3 5 26 4 7 1 22 4变成
3 5 26 4 22 4 16 3 20 3 1 2 11 2 7 1也就是b相同的话就按顺序输出,否者按照b大的在前面
用map和vector的话,里面的元素默认是按照从小到大排的,这时候就需要用到转逆向迭代器
元素在map中的存在方式
[5]((1,[1](7)),(2,[2](1,11))..........)
表示共可以分类成5组,(2,[2](1,11))第一个2表示元素a的值,第二个2表示与元素2对应的数有几个,那么1和11就是与2对应的元素的值了
具体的看代码:
#include <iostream>
#include <stdio.h>
#include <vector>
#include <map>
using namespace std;
int main () {
int n;
std::cin >> n;
std::map<int, std::vector<int> > m;
for (int i = 0; i < n; i++)
{
int a, b;
std::cin >> a >> b;
m [b].push_back (a);
}
std::map<int, std::vector<int> >::reverse_iterator it = m.rbegin ();
while (it != m.rend ())
{
int _cnt = it->second.size ();
for (int i = 0; i < _cnt; i++)
std::cout << it->second [i] << " " << it->first << std::endl;
it++;
}
return 0;
}