我已经声明了两个映射m1和m2。
M1的键在m2的键中。但并不是所有的m2密钥都在m1的密钥中。
有没有人能帮我找出与m1的密钥相比,m2中不常见的密钥?
示例
m1包含:
3=> 1 2 4
6=> 3 4 6m2包含:
3 => 3 5 6
6 => 6 4 8
8 => 2 4 3
10 => 2 5 7 9输出将是8和10。
发布于 2014-10-15 16:16:36
你可以通过std::set_difference来完成。示例:
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;结果:
[8,2 4 3][10,2 5 7 9]LIVE
发布于 2014-10-15 17:06:37
下面是一个解决方案,它通过定义一个新的key_iterator来处理键,它只返回键元素。该解决方案的灵感来自于this post。
#include <iostream>
#include<algorithm>
#include<map>
#include<string>
using namespace std;
typedef std::map<int,std::string> MapType;
typedef MapType::iterator IteratorType;
struct key_iterator : public IteratorType
{
key_iterator() : IteratorType() {}
key_iterator(IteratorType it) : IteratorType(it) {}
int* operator->() {return (int* const)& IteratorType::operator->()->first;}
int operator*() {return IteratorType::operator*().first;}
};
int main() {
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::vector<int> v;
key_iterator it1_begin=m1.begin();
key_iterator it1_end=m1.end();
key_iterator it2_begin=m2.begin();
key_iterator it2_end=m2.end();
std::set_difference(it2_begin, it2_end, it1_begin, it1_end, std::inserter(v,v.begin()));
for(auto i : v)
std::cout<<i<<" ";
std::cout<<std::endl;
// your code goes here
return 0;
}打印以下代码
8 10Live example。
如果有人想出了一个更好的语法来调用std::set_difference,请继续。
发布于 2014-10-15 14:47:33
您没有指定编程语言,所以这里有一些伪代码:
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'])https://stackoverflow.com/questions/26376033
复制相似问题