文件列表
- myutils.h
- myutils.cpp
- test.cpp
源码
- myutils.h
class shareholder_partyid
{
public:
shareholder_partyid(string shareholder, string partyid);
void show() const;
string shareholder;
string partyid;
};
class shareholder_partyid_hash
{
public:
size_t operator()(const shareholder_partyid& sp) const;
};
class shareholder_partyid_cmp
{
public:
bool operator()(const shareholder_partyid& sp1, const shareholder_partyid& sp2) const;
};
- myutils.cpp
#include "myutils.h"
#include <iostream>
#include <thread>
shareholder_partyid::shareholder_partyid(string shareholder, string partyid)
{
this->shareholder = shareholder;
this->partyid = partyid;
}
void shareholder_partyid::show() const
{
cout << "shareholder=" << shareholder << ", partyid=" << partyid << endl;
}
size_t shareholder_partyid_hash::operator()(const shareholder_partyid& sp) const
{
hash<string> hs;
const auto value = hs(sp.shareholder + sp.partyid);
cout << sp.shareholder << ", " << sp.partyid << ", value = " << value << endl;
return value;
}
bool shareholder_partyid_cmp::operator()(const shareholder_partyid& sp1, const shareholder_partyid& sp2) const
{
cout << "判等开始" << endl;
sp1.show();
sp2.show();
cout << "判等结束" << endl;
return (sp1.shareholder == sp2.shareholder) || (sp1.partyid == sp2.partyid);
}
- test.cpp
void f80()
{
unordered_set<shareholder_partyid, shareholder_partyid_hash, shareholder_partyid_cmp> us_sp;
us_sp.emplace(shareholder_partyid("zzm", "6100"));
us_sp.emplace(shareholder_partyid("zzm", "6100"));
us_sp.emplace(shareholder_partyid("tom", "6200"));
us_sp.emplace(shareholder_partyid("tom", "6200"));
us_sp.emplace(shareholder_partyid("sam", "6300"));
cout << us_sp.size() << "," << us_sp.bucket_count() << endl;
us_sp.emplace(shareholder_partyid("lucy", "6400"));
for(const auto el:us_sp)
{
el.show();
}
}
int main()
{
function<void()> pf = f80;
pf();
return 0;
}
运行结果
小结
unorder set ,先去插入元素哈希值,如果对应哈希槽有值则进行等值比较,如果没有相等元素则插入,如果有相等元素则忽略本次插入;如果对应哈希槽没有记录,则直接插入