C++ 如何找到不在其他地图的键中的地图键?
我已经声明了两个地图C++ 如何找到不在其他地图的键中的地图键?,c++,map,C++,Map,我已经声明了两个地图m1和m2 地图m1的键在m2的键中。但是m2的所有键都不在m1的键中 有人能帮我找到m2中与m1中的键相比不常见的键吗 范例 m1包含: 3=> 1 2 4 6=> 3 4 6 3 => 3 5 6 6 => 6 4 8 8 => 2 4 3 10 => 2 5 7 9 m2包含: 3=> 1 2 4 6=> 3 4 6 3 => 3 5 6 6 => 6 4
m1
和m2
地图m1的键在m2的键中。但是m2的所有键都不在m1的键中
有人能帮我找到m2中与m1中的键相比不常见的键吗
范例
m1包含:
3=> 1 2 4
6=> 3 4 6
3 => 3 5 6
6 => 6 4 8
8 => 2 4 3
10 => 2 5 7 9
m2包含:
3=> 1 2 4
6=> 3 4 6
3 => 3 5 6
6 => 6 4 8
8 => 2 4 3
10 => 2 5 7 9
输出为8和10。您没有指定编程语言,因此这里有一些伪代码:
m2.keySet() - m1.keySet()
像Python这样的语言有一个在集合上工作的-
操作符,所以以上就是所需要的
下面是一些实际的Python代码:
>>> m1 = {'x':4, 'y':3}
>>> m2 = {'x':4, 'y':3, 'z':5}
>>> set(m2.keys())-set(m1.keys())
set(['z'])
您没有指定编程语言,因此这里有一些伪代码:
m2.keySet() - m1.keySet()
像Python这样的语言有一个在集合上工作的-
操作符,所以以上就是所需要的
下面是一些实际的Python代码:
>>> m1 = {'x':4, 'y':3}
>>> m2 = {'x':4, 'y':3, 'z':5}
>>> set(m2.keys())-set(m1.keys())
set(['z'])
你可以自己做。例如:
std::map<int, std::string> m1;
m1[3] = "1 2 4";
m1[6] = "3 4 6";
std::map<int, std::string> m2;
m2[3] = "3 5 6";
m2[6] = "6 4 8";
m2[8] = "2 4 3";
m2[10] = "2 5 7 9";
std::map<int, std::string> m3;
std::set_difference(m2.begin(), m2.end(), m1.begin(), m1.end(), std::inserter(m3, m3.begin()), m1.value_comp());
for (auto i = m3.begin(); i != m3.end(); ++i) {
std::cout << "[" << i->first << "," << i->second << "]";
}
std::cout << std::endl;
你可以自己做。例如:
std::map<int, std::string> m1;
m1[3] = "1 2 4";
m1[6] = "3 4 6";
std::map<int, std::string> m2;
m2[3] = "3 5 6";
m2[6] = "6 4 8";
m2[8] = "2 4 3";
m2[10] = "2 5 7 9";
std::map<int, std::string> m3;
std::set_difference(m2.begin(), m2.end(), m1.begin(), m1.end(), std::inserter(m3, m3.begin()), m1.value_comp());
for (auto i = m3.begin(); i != m3.end(); ++i) {
std::cout << "[" << i->first << "," << i->second << "]";
}
std::cout << std::endl;
这里有一个解决方案,它通过定义一个新的
键迭代器来处理键,该迭代器只返回键元素。这一解决方案是由以下因素激发的
如果有人想出更好的语法来调用std::set_difference
,那就继续吧。这里有一个解决方案,它通过定义一个新的key\u迭代器
来处理键,该迭代器只返回键元素。这一解决方案是由以下因素激发的
如果有人想出一个更好的语法来调用<代码> STD::StIGIOLION< /COD>,继续。
谢谢,实际上,我想在C++中编写代码,你能帮助我C++中的代码吗?因为我对Python不熟悉。当然,同样的技术也适用。您可能有两个类为std::map
的对象。使用中描述的技术将密钥提取到一个集合中,然后可以使用std::set_difference
减去这些集合。我们是否可以在不使用类对象的情况下使用这些技术?。我是C++新手。我知道制作一个(真实)地图的唯一方法是使用<代码> STD::MAP< /Cord>的实例。如果您没有使用这个类,您如何表达地图?实际上,我想用C++编写代码,你能帮我C++中的代码吗?因为我对Python不熟悉。当然,同样的技术也适用。您可能有两个类为std::map
的对象。使用中描述的技术将密钥提取到一个集合中,然后可以使用std::set_difference
减去这些集合。我们是否可以在不使用类对象的情况下使用这些技术?。我是C++新手。我知道制作一个(真实)地图的唯一方法是使用<代码> STD::MAP< /Cord>的实例。如果您没有使用这个类,您如何表达地图?As structs?+1:我也有这个解决方案,但拒绝发布,因为OP明确要求提供密钥(假设地图的第二个条目中有一些巨大的对象)。您能否以某种方式更改代码,使其将键插入到(比如)一个std::vector
?这里有一个只允许使用向量键的成分:@davidhigh要实现这一点,我们需要在地图上使用一个键迭代器,使用Boost的transform_迭代器,或者自己实现它。无论如何,这取决于OP.:)+1:我也有这个解决方案,但拒绝发布,因为OP明确要求提供密钥(假设地图的第二个条目中有一些巨大的对象)。您能否以某种方式更改代码,使其将键插入到(比如)一个std::vector
?这里有一个只允许使用向量键的成分:@davidhigh要实现这一点,我们需要在地图上使用一个键迭代器,使用Boost的transform_迭代器,或者自己实现它。无论如何,这取决于作品:)