gpt4 book ai didi

c++ - transform_iterator 与 std::iterators 不兼容?

转载 作者:行者123 更新时间:2023-11-28 08:17:05 25 4
gpt4 key购买 nike

我在使用 boost::transform_iterator 时遇到问题,其中需要“普通”迭代器。例如,我想将 map 中的所有键添加到一个集合中。我写了以下简短片段:

template <typename K, typename V>
struct map_keys {
typedef const K& result_type;
const K& operator()(const std::pair<K,V>& kvp) const {
return kvp.first;
}
};

int main() {
std::map<int, double> my_map;
std::set<int> my_set;
my_map[1]=1.2;
my_map[2]=2.4;
my_map[4]=4.1;
my_map[6]=12.2;
my_map[123]=3;
typedef map_keys<int, double> mk;
auto b = boost::make_transform_iterator(my_map.begin(), mk()),
e = boost::make_transform_iterator(my_map.end(), mk());
my_set.insert(b,e);
return 0;
}

insert 之后,my_set 包含一个值,-8589934600xcccccccc。为什么?如果我在循环中打印 *b,所有值都会按预期打印。

最佳答案

好吧,突然自己解决了。问题是 typedef result_type (文档中没有提到,但除非我有它,否则代码不会编译( result_type 不是 map_keys<K,V> 的成员))。如果我改为将其定义为

typedef K result_type;

它有效。我想就像之前写的那样,它返回了某物的地址?

关于c++ - transform_iterator 与 std::iterators 不兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7359550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com