我必須爲每個變量存儲3個字符串,但不知道哪個是C++中最好的數據結構。
我只能想到Struct,但不知道它是否是最好的方法。這是一個有效的數據結構Map <string,string,string> in C++?
類似於string var [100] [3],第一維(100)應該動態添加和刪除。
我嘗試了各種地圖,多圖的東西。
任何幫助表示讚賞。謝謝
我必須爲每個變量存儲3個字符串,但不知道哪個是C++中最好的數據結構。
我只能想到Struct,但不知道它是否是最好的方法。這是一個有效的數據結構Map <string,string,string> in C++?
類似於string var [100] [3],第一維(100)應該動態添加和刪除。
我嘗試了各種地圖,多圖的東西。
任何幫助表示讚賞。謝謝
如果你總是有三個字符串在一個三元組中,並且想要有多個三元組,那麼用三個字符串定義結構並把它放到std::vector
。
struct Triplet {
std::string a,b,c;
};
std::vector<Triplet> data;
您可以使用vector
存儲N個元素
vector<string> three_strings(3);
three_strings.push_back("one");
three_strings.push_back("two");
three_strings.push_back("three");
請注意:tuple
是一個選擇,但:(1)它是tr1
標準的一部分,因此可能無法使用你的C++編譯器/安裝尚未; (2)它存儲不同種類的數據(例如,3級隨機類型的物品,不一定3字符串)其可以是矯枉過正
你可以使用一個類或一個tuple,並存儲該元組中的矢量
std::vector<boost::tuple<std::string, std::string, std::string> > v;
boost::tuple<std::string, std::string, std::string> t = boost::make_tuple(s1, s2, s3);
v.push_back(t)
Map <string , vector <string> >
將允許您將字符串矢量映射到字符串鍵值。如果映射到每個鍵的字符串數量相同,則使用字符串數組來減少向量的內存開銷。
如果你總是想要3個字符串,那麼tuple將需要更少的開銷。
#include <iostream>
#include <string>
#include <tuple>
typedef std::tuple<std::string, std::string, std::string> MyTuple;
int
main(int argc, char **argv)
{
MyTuple t =
make_tuple(
std::string("string 1"),
std::string("string 2"),
std::string("string 3")
);
std::cout
<< std::get<0>(t) << std::endl
<< std::get<1>(t) << std::endl
<< std::get<2>(t) << std::endl;
return 0;
}
Map<string, string, string>
無效。但是,您可以使用3個字符串創建新的數據結構並將其存儲在向量中。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class data_structure
{
public:
string first;
string second;
string third;
};
int main()
{
vector<data_structure> my_vec;
data_structure elem1;
elem1.first = "one";
elem1.second = "two";
elem1.third = "three";
my_vec.push_back(elem1);
data_structure elem2;
elem2.first = "four";
elem2.second = "five";
elem2.third = "six";
my_vec.push_back(elem2);
for (int i = 0; i < my_vec.size(); i++)
{
// print stuff
}
}
對上述組合的另一種建議:Boost Tuple(如果您已經安裝了Boost)。
vector<vector<string> >
怎麼樣?
你的問題不清楚。你*總是*有3,還是你想「動態添加和刪除」? – 2011-02-08 15:12:04
已修改的問題 – rda3mon 2011-02-08 15:13:12
您能否舉一個您正在存儲的鍵/值的示例,以使其更清楚一些,您需要什麼? – Jordan 2011-02-08 15:19:16