2011-02-08 3 views
4

변수 당 3 개의 문자열을 저장해야하지만 어느 것이 C++에서 사용할 수있는 최상의 데이터 구조인지는 알 수 없습니다.
구조체 만 생각할 수도 있지만 최선의 방법인지는 확실하지 않습니다.이것은 유효한 데이터 구조인가요? C++의 Map <string, string, string>?

문자열 var [100] [3]과 같이 첫 번째 측정 기준 (100)은 동적으로 추가 및 제거해야합니다.

지도, 멀티 맵으로 모든 것을 시도했습니다.

도움을 주시면 감사하겠습니다. 당신이

+2

질문이 명확하지 않습니다. 당신은 * 항상 * 정확하게 3을 가지고 있습니까? 아니면 "동적으로 추가하고 제거 하시겠습니까?" –

+0

수정 된 질문 – rda3mon

+0

당신이 필요로하는 것을 조금 더 명확하게하기 위해 저장하는 키/값의 예를 들어 줄 수 있습니까? – Jordan

답변

8

항상 정확히 3 개의 문자열을 3 개로 묶어 여러 개의 3 개로 묶고 싶다면 struct를 3 개의 문자열로 정의하고 std::vector에 넣으십시오.

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

std::vector<Triplet> data; 
+0

그래서 구조체가 갈 길은 무엇입니까? 감사합니다 – rda3mon

+0

@ 링고 당신도 수업을 사용할 수 내 대답을 확인하십시오. 그러나 이것은 아름답습니다! +1 – karlphillip

+0

당신도 괜찮아 보이지만, 이것이 당신이 클래스를 사용하는 것보다 낫다고 생각하는 이유는 무엇입니까? – rda3mon

0

당신은

vector<string> three_strings(3); 

three_strings.push_back("one"); 
three_strings.push_back("two"); 
three_strings.push_back("three"); 

tuple이 대안입니다,하지만주의하시기 바랍니다 N 요소를 저장하는 vector을 사용할 수 있습니다 감사합니다 (1) 당신의 C++ 컴파일러에서 사용하지 못할 수 있으므로 tr1 표준의 일부이며,/설치가 아직 완료되지 않았습니다. (2)가 저장 이기종 데이터 잔인한 될 수있다 (예를 들어 3 개 랜덤 형 아이템, 반드시 3 문자열)

당신이 벡터에서 클래스 또는 tuple을 사용하고 튜플을 저장할 수 있습니다
1

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> >는 문자열 키 값에 문자열의 벡터를 매핑 할 수 있습니다. 각 키에 매핑 된 문자열의 수가 동일한 경우 문자열 배열을 사용하여 벡터의 메모리 오버 헤드를 줄이십시오.

+0

그러나 데이터를 어떻게 삽입합니까? – rda3mon

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> >?

관련 문제