我用ESP32写了一个接收pocsag的代码,每条消息有都单独有接收时间和内容,接收的消息存储在内部储存,但是现在有个问题,有相同的消息不会自动覆盖,有没有什么办法修改一下
时间: 2024-11-21 18:37:53 浏览: 3
在ESP32中,如果你想要在接收到相同的消息时自动替换之前存储的内容,你可以考虑采用数据结构的动态更新策略。这里有几个建议:
1. **队列(Queue)机制**:可以使用如`std::queue`或`esp_queue`这样的数据结构,当新消息到来时,检查是否已存在相同的键值对。如果存在,就直接删除并添加新的。这样旧消息会被新消息替代。
```cpp
#include <ESP\Queue.h>
// ...
Queue<String> messageQueue;
void onMessageRecieved(String content) {
String currentKey = computeMessageKey(content); // 根据内容生成唯一标识
if (messageQueue.size() > 0 && messageQueue.getFront() == currentKey) {
messageQueue.pop(); // 删除当前队首的重复项
}
messageQueue.push(currentKey); // 添加新消息到队列
}
```
2. **哈希表(Hash Table)**:使用哈希表(如`std::unordered_map`)作为存储容器,它会自动处理重复键的问题。当添加新消息时,如果有冲突(即键已经存在),则更新其对应的值。
```cpp
#include <unordered_map>
// ...
std::unordered_map<std::string, String> messageMap;
void onMessageRecieved(String content) {
std::string key = computeMessageKey(content);
messageMap[key] = content; // 如果key不存在,插入新条目;若存在,则覆盖
}
```
3. **定时清理**:设置一个定期的任务,遍历存储的数据结构,移除过期或不再需要的消息,以保持一定的存储容量。
记得根据实际需求选择合适的方法,并确保`computeMessageKey()`函数能够生成唯一的标识以便区分消息。
阅读全文