2011-11-14 1 views
0

어느 것이 더 빠르는지 알고 싶습니다 해시 테이블 또는 벡터.해시 테이블 또는 벡터에 정보 저장

내부의 모든 정보를 루프로보고 내 현재 데이터와 비교하려면 이미 내부에 있다면 루프를 중단하고 싶습니다.

예 :

I가 [{1,2}, {1,2,3}] 내 현재 새로운 데이터가 내부 루프 {1,2} (내 벡터 또는 제 해시 안쪽 테이블), 그래서 나는 내 루프를 부러 뜨릴 것이고 만약 내가 {2,1} 내가 그것을 너무 부러 뜨릴 것이다.

그렇지 않으면 내가 깰 수있는 순서에 관계없이 모든 요소가 일치하는 경우 내 루프를 계속합니다. 해시 테이블이 훨씬 빠르면 C++을 처음 사용하기 때문에 구현할 수있는 힌트를 얻을 수 있습니까?

+0

스마트 폰에서 질문을 게시 했습니까? 구두점을 사용하지 않아도 읽기가 어렵습니다. – minjang

+0

죄송합니다. 다시 작성하려고 했으므로 좋겠다고 생각합니다. – mona

+0

벡터 및 해시 테이블 만 선택할 수 있습니까? –

답변

0

Hashtable은 키 값 쌍을 생성 할 때 더 잘 작동합니다. 유일한 조건은 키가 동일한 경우 하나 이상의 조합을 가져서는 안됩니다. 따라서 키가 고유하기 때문에 테이블에 3,1 및 3,2를 가질 수 없습니다.

lhs에 복제본이있는 경우 벡터를 사용하는 것이 가장 좋습니다.

0

중첩 된 집합, 즉 std::set<std::set<int> >을 사용합니다.

#include <set> 
#include <cassert> 

typedef std::set<int> Entry; 
typedef std::set<Entry> Table; 

int main() { 
    int e1[] = {1,2}; 
    int e2[] = {1,2,3}; 
    int e3[] = {2,1}; 
    int e4[] = {3,2}; 

    Table t; 
    t.insert(Entry(e1, e1+2)); 
    t.insert(Entry(e2, e2+3)); 

    Table::iterator it; 
    Table::iterator end = t.end();; 

    // Search for 1,2 
    it = t.find(Entry(e1, e1+2)); 
    // Should find it 
    assert(it != end); 

    // Search for 2,1 
    it = t.find(Entry(e3, e3+2)); 
    // Should find it 
    assert(it != end); 

    // Search for 3,2 
    it = t.find(Entry(e4, e4+2)); 
    // Should NOT find it 
    assert(it == end); 
}