我有两张地图,tk1
和tk2
,结构如下:
std::map<std::string, double>tk1;
std::map<std::string, double>tk2;
tk1
包含以下数据:
2011-01-03 2200
2011-01-04 2209
2011-01-05 2300
和tk2
包含以下数据:
2011-01-03 2450
2011-01-04 2465
2011-01-06 2476
2011-01-07 2457
我创建了一个包含日期为字符串的集合,如
中所示std::set<std::string>dateset;
std::set<std::string>new_dateset;
我通过迭代2个地图并插入到
中的集合来创建它dateset.insert(it->first);
dateset
具有以下值:
2011-01-03
2011-01-04
2011-01-05
2011-01-06
2011-01-07
我想填充new_dateset,因此它只包含tk1
和tk2
中的日期,即new_dateset应仅包含
2011-01-03
2011-01-04
我写了以下内容:
std::set<std::string>::iterator it1=dateset.begin(), end1=dateset.end();
std::map<std::string, double>::iterator it2=tk1.begin(), end2=tk1.end();
std::map<std::string, double>::iterator it3=tk2.begin(), end3=tk2.end();
while (it1 != end1) {
if (it2->first == *it1)
new_dateset.insert(it2->first);
++it1;
}
但显然我没有正确地做到这一点。有人可以建议最好的方法来做到这一点。
答案 0 :(得分:3)
您可以使用previous answer中的std::set_intersection
来考虑key_iterator
。
答案 1 :(得分:1)
迭代it1
,使用first
方法检查每个元素的tk2
是否在find()
中,如果存在,则将其插入到集合中。您在示例中执行的操作是检查dataset
中包含tk1
或tk2
中的键的元素。
for(; it2 != end2; ++it2) {
if(tk2.find(it2->first) != end3) new_dataset.insert(it2->first);
}
答案 2 :(得分:0)
您应该按如下方式比较字符串:
if(it2->first.compare(*it) == 0)
{
//strings match, do something.
}
else
{
// no match do something else.
}
答案 3 :(得分:0)
迭代tk1中的元素,看看tk2
中是否存在密钥。如果是,则插入。
for(; it2 != end2; ++it2)
{
if(tk2.find(it2->first) != end3)
{
new_dataset.insert(it2->first);
}
}