首页 文章

C stl map:与BSTR有关的问题

提问于
浏览
3

我在我的代码中使用了一个映射 <BSTR,struct> bstr作为键并构造值 .

这项工作还是我必须重新定义一些东西?

我看到没有编译问题,我也可以添加元素 . 但是, map.find() 不起作用 . 即使该元素存在,它也始终返回 map.end() (未找到元素) .

我做了一个临时的解决方法如下 - 从 map.begin() 循环到 map.end() 并为每个元素执行lstrcmpW . 这似乎有效,但不要认为这太有效了 .

什么可能是错的任何建议/提示?可以使用 BSTR 作为 Map 的关键吗?我知道 Map 不支持某些非本机数据类型 - 结构或类......你需要为此定义一个 < 运算符 .

2 回答

  • 3

    使用ATL的CComBSTR作为密钥类型而不是BSTR . CComBSTR重载operator<来执行实际的字符串比较,而不是像你当前那样使用指针(地址)比较 .

    CComBSTR还简化了生命周期管理 . 使用BSTR作为密钥类型,您必须确保BSTR比映射的生命周期更长(实际上它们必须在 Map 被破坏之前被释放) . CComBSTR遵循RAII原则,因此您无需进行任何手动释放 .

  • 4

    C中的BSTR类型是指针 . Map正在比较彼此之间的指针,而不是字符串 . 要在map中使用,你应该为BSTR编写一个包装器或使用预制的包装器 .

相关问题