std::map<std::string, std::shared_ptr<CChannel>> g_chan_map; 其中key为 “xxxyyy”, 如果找到key中包含 “yyy”
时间: 2024-10-09 16:14:34 浏览: 27
在这个`std::map<std::string, std::shared_ptr<CChannel>> g_chan_map`中,"xxxyyy" 是键(key),它是一个字符串类型。如果要查找 key 中是否包含 "yyy",你可以遍历 map 并检查每个键。
1. 遍历 map 的示例[^1]:
```cpp
CaselessEq<std::string> containsYYY;
for (const auto &kvp : g_chan_map) {
const std::string &layerName = kvp.first;
if (containsYYY(kvp.first, "yyy")) {
// 找到了 key 包含 "yyy"
std::cout << "Key " << layerName << " contains 'yyy'" << std::endl;
}
}
```
这段代码会检查 `g_chan_map` 中每个键(即 `layerName`)是否以 "yyy" 结尾,如果是,则打印相应的消息。
相关问题
没有与这些操作数匹配的 "=" 运算符C/C++(349) listener_str.cpp(12, 23): 操作数类型为: std::shared_ptr<rclcpp::Subscription<std_msgs::msg::String, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<std_msgs::msg::String, std::allocator<void>>>> = std::shared_ptr<rclcpp::Subscription<const std::shared_ptr<std_msgs::msg::String_<std::allocator<void>>> &, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<const std::shared_ptr<std_msgs::msg::String_<std::allocator<void>>> &, std::allocator<void>>>>
这个错误通常是因为尝试将一个类型为`std::shared_ptr<rclcpp::Subscription<const std::shared_ptr<std_msgs::msg::String_<std::allocator<void>>> &, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<const std::shared_ptr<std_msgs::msg::String_<std::allocator<void>>> &, std::allocator<void>>>>`的变量赋值给一个类型为`std::shared_ptr<rclcpp::Subscription<std_msgs::msg::String, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<std_msgs::msg::String, std::allocator<void>>>>`的变量,这两个类型虽然都是指向`rclcpp::Subscription`的`shared_ptr`,但是模板参数不同,无法直接赋值。
解决方法是将两个类型匹配,可以通过使用`std::static_pointer_cast`将其中一个类型转换成另一个类型,例如:
```
std::shared_ptr<rclcpp::Subscription<std_msgs::msg::String, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<std_msgs::msg::String, std::allocator<void>>>> sub;
std::shared_ptr<rclcpp::Subscription<const std::shared_ptr<std_msgs::msg::String_<std::allocator<void>>> &, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<const std::shared_ptr<std_msgs::msg::String_<std::allocator<void>>> &, std::allocator<void>>>> sub_const;
// 将 sub_const 转换成 sub 的类型
sub = std::static_pointer_cast<rclcpp::Subscription<std_msgs::msg::String, std::allocator<void>, rclcpp::message_memory_strategy::MessageMemoryStrategy<std_msgs::msg::String, std::allocator<void>>>>(sub_const);
```
std::map<std::shared_ptr<EventBase>, std::shared_ptr<MESSAGE_MAP>> mEventBuilders;
这是一个使用`std::map`容器的数据成员`mEventBuilders`,它的键类型为`std::shared_ptr<EventBase>`,值类型为`std::shared_ptr<MESSAGE_MAP>`。这意味着`mEventBuilders`是一个将`std::shared_ptr<EventBase>`映射到`std::shared_ptr<MESSAGE_MAP>`的映射表。
阅读全文