AJ.*_*AJ. 18 c++ stl std multimap
我有一个multimap,我想让它中的所有唯一键存储在一个向量中.
multimap<char,int> mymm;
multimap<char,int>::iterator it;
char c;
mymm.insert(pair<char,int>('x',50));
mymm.insert(pair<char,int>('y',100));
mymm.insert(pair<char,int>('y',150));
mymm.insert(pair<char,int>('y',200));
mymm.insert(pair<char,int>('z',250));
mymm.insert(pair<char,int>('z',300));
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?有方法可以使用键计算元素数,但不计算多图中唯一键的数量.
补充:通过唯一我指的是multimap中的所有键一次 - 它们可以在multimap中重复或出现一次.
所以这里的唯一键是-x,y和z
Jee*_*eva 36
我试过这个并且它有效
for( multimap<char,int>::iterator it = mymm.begin(), end = mymm.end(); it != end; it = mymm.upper_bound(it->first))
{
cout << it->first << ' ' << it->second << endl;
}
Run Code Online (Sandbox Code Playgroud)
jog*_*pan 16
由于a的条目std::multimap<>是隐式排序的,并且在迭代它们时按排序顺序排列,因此可以使用此std::unique_copy算法:
#include <iostream>
#include <map>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
/* ...Your existing code... */
/* Create vector of deduplicated entries: */
vector<pair<char,int>> keys_dedup;
unique_copy(begin(mymm),
end(mymm),
back_inserter(keys_dedup),
[](const pair<char,int> &entry1,
const pair<char,int> &entry2) {
return (entry1.first == entry2.first);
}
);
/* Print unique keys, just to confirm. */
for (const auto &entry : keys_dedup)
cout << entry.first << '\n';
cout.flush();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
由此添加的额外工作在多图的条目数中是线性的,而使用std::set或Jeeva的重复数据删除方法都添加O(n log n)计算步骤.
备注:我使用的lambda表达式假定为C++ 11.可以为C++ 03重写这个.
| 归档时间: |
|
| 查看次数: |
21366 次 |
| 最近记录: |