Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.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++ transform_迭代器与std::迭代器不兼容?_C++_Iterator - Fatal编程技术网

C++ transform_迭代器与std::迭代器不兼容?

C++ transform_迭代器与std::迭代器不兼容?,c++,iterator,C++,Iterator,我在使用boost::transform_迭代器时遇到了问题,因为这里需要“普通”迭代器。例如,我想将贴图中的所有关键点添加到集合中。我写了以下简短的片段: template <typename K, typename V> struct map_keys { typedef const K& result_type; const K& operator()(const std::pair<K,V>& kvp) const {

我在使用
boost::transform_迭代器时遇到了问题,因为这里需要“普通”迭代器。例如,我想将贴图中的所有关键点添加到集合中。我写了以下简短的片段:

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;
}
模板
结构映射键{
typedef const K和result_type;
常量K&运算符()(常量std::pair&kvp)常量{
首先返回kvp;
}
};
int main(){
映射我的地图;
设置我的设置;
我的地图[1]=1.2;
我的地图[2]=2.4;
我的地图[4]=4.1;
我的地图[6]=12.2;
我的地图[123]=3;
类型定义映射键mk;
auto b=boost::make_transform_迭代器(my_map.begin(),mk()),
e=boost::make_transform_迭代器(my_map.end(),mk());
my_set.插入(b,e);
返回0;
}

在插入
之后,
我的集合
包含一个值,
-858993460
0xCCCC
。为什么?如果我在循环中打印
*b
,所有值都会按预期打印。

好的,我自己突然解决了。问题在于typedef
result\u type
(文档中没有提到,但除非我有它,否则代码不会编译(
result\u type
不是
map\u key
的成员)。如果我改为键入

typedef K result_type;

它起作用了。我想,正如前面编写的那样,它返回了某物的地址?

它返回了对参数
kvp
的引用。这是一个参考本身,可能是一个临时的。顺便说一句,
result\u类型
记录在
boost::result\u of
下,而
transform\u迭代器
记录为使用
result\u of
@MSalters:Hm,ok。我在文档中搜索
result\u type
,结果为空。但是知道要找什么,它就在那里。我发现阅读boost文档非常困难,到处都是模板,你几乎看不到森林中所有的树木。。。无论如何,谢谢你的澄清!