Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何找到不在其他地图的键中的地图键?_C++_Map - Fatal编程技术网

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_迭代器,或者自己实现它。无论如何,这取决于作品:)