当两个键(对)可能不包含两个值时,如何将两个键映射到一个键
How to map 2 keys (pair) to one key when the pair might not contain both values?
我想将md5映射到sha1, sha256映射到sha1。
我想用std::map<pair<string, string>, string>
代替使用2个不同的地图。当插入值时,我将同时使用md5和sha256,但我只能使用md5进行查询。例子:
md5= x;
map.find (x,null)--> return sha1
sha256 =y;
map.find ("" , y) --> return sha1
map(x,y) ----> return sha1
有什么办法吗?
键之间的某种OR
…
Thanks to lot
我曾经为类似的目的创建了一个类,也许它可以帮助你。
template<typename T, typename K1, typename K2>
class BiKeyMap
{
public:
typedef boost::shared_ptr<T> ptr_type;
private:
std::map<K1, ptr_type > _map1;
std::map<K2, ptr_type > _map2;
public:
bool insert(const ptr_type& value, const K1& key1, const K2& key2)
{
bool lResult1;
bool lResult2;
lResult1= _map1.insert(std::make_pair(key1, value)).second;
lResult2= _map2.insert(std::make_pair(key2, value)).second;
return (lResult1&&lResult2);
}
ptr_type find1(const K1& key)
{
typename std::map<K1, ptr_type>::iterator itr = _map1.find(key);
if (itr == _map1.end())
throw ...;
return itr->second;
}
ptr_type find2(const K2& key)
{
typename std::map<K2, ptr_type>::iterator itr = _map2.find(key);
if (itr == _map2.end())
throw ....
return itr->second;
}
};
问题在于operator<
在std::pair之间实现的方式(在组件之间使用字典顺序,因此空字符串将始终是"first")。
除了做一些不好的事情,比如为std::pair<string,string>
专门化operator<
(这使得新的行为对任何这样的对都可用,甚至不涉及映射),您可能需要一个包含两个字符串的类作为键,实现operator<
,以便如果第一个成员之一是空的,比较只在第二秒完成。
struct mykey { std::string fisrt, std::string second; };
bool operator<(const mykey& a, const mykey& b)
{
int ck = (a.first.size() && b.first.size()) + 2*(a.second.size() && b.second.size());
return (ck==1)? a.first<b.first:
(ck==2)? a.second<b.second:
a.first+a.second < b.first+b.second;
}
和提供一个类似
的元素 mykey::mykey(const std::string s1, const std::string& s2)
,这样你就可以通过给s1或s2一个空字符串来创建一个"键来比较",或者通过给s1和s2来在映射中插入值。
相关文章:
- 比较两个大小不等的映射c++
- 我可以比朴素哈希表更快地将随机字符串映射到两个类吗?
- 如何通过键和值以及在C 中的结果映射中比较两个地图?我们有任何STL API吗?
- 在两个映射中查找共同值,无需迭代
- 如何使用 std::multimap 将整数键映射到两个用作多维数组坐标的整数值(对于井字)?
- 如何协同映射以下两个对象?
- 两个进程之间的共享映射内存在编辑时未更新
- 使用原子指令确保映射访问安全,是否可以使用两个不同的原子对指令进行重新排序
- 合并两个映射 c++
- 如何合并两个 mpl 映射生成新映射
- 错误:尝试在两个映射中插入时,"__x < __y"中的"运算符<"不匹配
- 指向同一项的两个映射迭代器是否保证相等
- 合并两个映射,对C++中相同键的值求和
- 使用c++减少两个映射的处理时间
- 两个映射之间的分配-移动语义和性能
- 合并两个映射<字符串,整数>
- 两个映射不匹配
- 键上的两个映射相交,保留第一个映射的值
- c++ 11 STL在两个映射之间使用move赋值合并
- 有没有一种优雅的方法来遍历两个映射并比较值(映射具有相同的类型)