2011-02-08 124 views
4

我必須爲每個變量存儲3個字符串,但不知道哪個是C++中最好的數據結構。
我只能想到Struct,但不知道它是否是最好的方法。這是一個有效的數據結構Map <string,string,string> in C++?

類似於string var [100] [3],第一維(100)應該動態添加和刪除。

我嘗試了各種地圖,多圖的東西。

任何幫助表示讚賞。謝謝

+2

你的問題不清楚。你*總是*有3,還是你想「動態添加和刪除」? – 2011-02-08 15:12:04

+0

已修改的問題 – rda3mon 2011-02-08 15:13:12

+0

您能否舉一個您正在存儲的鍵/值的示例,以使其更清楚一些,您需要什麼? – Jordan 2011-02-08 15:19:16

回答

8

如果你總是有三個字符串在一個三元組中,並且想要有多個三元組,那麼用三個字符串定義結構並把它放到std::vector

struct Triplet { 
    std::string a,b,c; 
}; 

std::vector<Triplet> data; 
0

您可以使用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字符串)其可以是矯枉過正

1

你可以使用一個類或一個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) 
0

Map <string , vector <string> >將允許您將字符串矢量映射到字符串鍵值。如果映射到每個鍵的字符串數量相同,則使用字符串數組來減少向量的內存開銷。

1

如果你總是想要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; 
} 
3

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 
    } 

} 
1

對上述組合的另一種建議:Boost Tuple(如果您已經安裝了Boost)。

0

vector<vector<string> >怎麼樣?

相關問題