根据对的第一个值对地图进行排序
Sort a map on the basis of first value of pair
假设我必须将我的地图描述为
map<int,pair<long,int>> mp;
现在我插入元素为
int y; long x;
pair<long,int> p;
for(int i=0;i<5;i++)
{
cin>>x>>y;
p.first=x;
p.second=y;
mp.insert({i,p}); // *** what is wrong here syntax wise???***
}
此外,我想根据对的第一个值对其进行排序。
你可以在这里使用一些小技巧。
c++
中的地图会自动按键排序所有内容,因此您可以执行以下操作 =>
map <long, (set,vector) < int > > mp; //Create this kind of map
//it will sort elements by first value and depending on your needs, select vector or set
//if you need to sort elements by second value use set
//if you do not care about it use vector
long x;
int y;
for (int i = 0; i < n; i++)
{
cin >> x >> y;
if (mp.find(x) != mp.end()) // if element exist
{
mp[x].push_back(y); // add it to vector
}
else
{
mp[x] = vector < int > (); // if not create new vector
mp[x].push_back(y); // and then push new element
}
}
A std::map
按其键索引和排序。句号。
我只能想象 2 种可能的方法可以根据它的值排序:
- 反转结构,将给出顺序的元素作为键(这是@Suspicio 的回答)
- 使用数据库世界中所谓的二级索引,这是一个辅助事物,将根据您的要求进行排序和指向真实数据。
在这里,如果您可以接受在使用它之前对它进行一次排序(如果您的地图一旦填充就不会更改,则不同)或 std::multimap
如果您希望能够轻松添加(或删除)项目。
multimap<long, int> indices;
for (auto elt : mp) {
indices.insert({ elt.second.first, elt.first });
}
您现在可以处理您的 sorted 地图:
for (auto index : indices) {
auto elt = mp.find(index.second); // *elt will give the elements in order
...
}
每当您向原始 mp
地图添加或删除元素时,您只需更新 indices
多地图。
假设我必须将我的地图描述为
map<int,pair<long,int>> mp;
现在我插入元素为
int y; long x;
pair<long,int> p;
for(int i=0;i<5;i++)
{
cin>>x>>y;
p.first=x;
p.second=y;
mp.insert({i,p}); // *** what is wrong here syntax wise???***
}
此外,我想根据对的第一个值对其进行排序。
你可以在这里使用一些小技巧。
c++
中的地图会自动按键排序所有内容,因此您可以执行以下操作 =>
map <long, (set,vector) < int > > mp; //Create this kind of map
//it will sort elements by first value and depending on your needs, select vector or set
//if you need to sort elements by second value use set
//if you do not care about it use vector
long x;
int y;
for (int i = 0; i < n; i++)
{
cin >> x >> y;
if (mp.find(x) != mp.end()) // if element exist
{
mp[x].push_back(y); // add it to vector
}
else
{
mp[x] = vector < int > (); // if not create new vector
mp[x].push_back(y); // and then push new element
}
}
A std::map
按其键索引和排序。句号。
我只能想象 2 种可能的方法可以根据它的值排序:
- 反转结构,将给出顺序的元素作为键(这是@Suspicio 的回答)
- 使用数据库世界中所谓的二级索引,这是一个辅助事物,将根据您的要求进行排序和指向真实数据。
在这里,如果您可以接受在使用它之前对它进行一次排序(如果您的地图一旦填充就不会更改,则不同)或 std::multimap
如果您希望能够轻松添加(或删除)项目。
multimap<long, int> indices;
for (auto elt : mp) {
indices.insert({ elt.second.first, elt.first });
}
您现在可以处理您的 sorted 地图:
for (auto index : indices) {
auto elt = mp.find(index.second); // *elt will give the elements in order
...
}
每当您向原始 mp
地图添加或删除元素时,您只需更新 indices
多地图。