C++ proto map是Google開源的一種數(shù)據結構,用于存儲鍵值對莹妒,其中鍵和值都是任意類型的假丧。它類似于C++ STL中的map,但其使用更加方便和高效动羽。
使用proto map需要先定義一個proto文件包帚,然后使用protobuf編譯器生成對應的C++代碼。下面是一個簡單的proto文件的例子:
syntax = "proto3";
package my_package;
message MyMap {
map<string, int32> my_map = 1;
}
上述proto文件定義了一個名為MyMap的message运吓,其中包含了一個名為my_map的proto map渴邦。該map的鍵類型為string疯趟,值類型為int32。在生成C++代碼后谋梭,我們可以使用以下方式來操作該map:
#include "my_map.pb.h"
MyMap my_map;
my_map.mutable_my_map()["key1"] = 10;
my_map.mutable_my_map()["key2"] = 20;
for (const auto& entry : my_map.my_map()) {
std::cout << entry.first << ": " << entry.second << std::endl;
}
上述代碼中信峻,我們首先創(chuàng)建了一個MyMap對象my_map,然后使用mutable_my_map()方法獲取可修改的map對象瓮床,并通過[]操作符向其中添加了兩個鍵值對盹舞。最后,我們使用my_map.my_map()方法獲取只讀的map對象隘庄,并使用迭代器遍歷了所有的鍵值對并輸出了它們的值踢步。
除了基本的添加和遍歷操作外,proto map還支持查找丑掺、刪除获印、清空等常用操作,具體請參見Google官方文檔街州。
C++中的proto map是指protobuf庫中的Map類型兼丰,通常通過以下方式向map中插入數(shù)據:
// 定義map
google::protobuf::Map<string, int> my_map;
// 插入數(shù)據
my_map.insert({"key1", 1});
my_map.insert({"key2", 2});
// 或者
auto iter = my_map.emplace("key3", 3);
其中,insert()
函數(shù)可以直接插入鍵值對唆缴,也可以插入一個pair類型的元素鳍征,如上面的例子中。emplace()
函數(shù)可以直接插入鍵值對面徽,返回一個指向插入元素的迭代器艳丛。
需要注意的是,在使用proto map時斗忌,需要在代碼中包含頭文件<google/protobuf/map.h>
质礼。