簡體   English   中英

std :: string或char []作為大型數組狀結構的元素

[英]std::string or char[] as the element for a large array-like structure

我正在創建一個哈希表。 每個值都是一個字符串。 我有一個問題,決定要使用什么結構來存儲字符串。 憑直覺,我想到了std::stringchar* 但,

1),如果字符串短,則std::string似乎會使用堆棧。 這意味着如果我的哈希表很大,那不是一個好選擇。
2),如果使用char* ,則不知道要更改值會返回什么,例如在以下情況下: myTable[i] = changedString; 在這種情況下,我似乎需要實現一個新的字符串類。 但是我感覺在那里沒有必要使用std::string

有人可以提出任何建議/意見嗎? 謝謝!

我假設您正在嘗試實現unordered_map(HW?),這就是為什么您不使用它的原因。

您應該使用std :: vector或std :: string,但不要使用數組。

為什么使用堆棧會出現std :: string問題?

std::string引起的開銷是最小的,實際上AFAIK除了指向字符串內部緩沖區的指針外,只有sizecapacity成員,均為size_t類型,導致每個字符串8個字節(取決於環境),因此如果您有100 000個字符串的數組,那么將有大約780KB的開銷,除非您處於具有嚴格內存限制的環境中,否則我不必擔心。

如果字符串的長度是固定的或以最小的方式變化(例如2到4個字符),則使用具有自動存儲持續時間的數組可能更合理:

struct X {
    ...
    char code[4]; // up to 4 characters
};

即使以以下方式復制實例,該方法也能正常工作:

X x1, x2;
...
x2 = x1;

但是,如果您現在沒有充分的理由擔心這一點,那么此時您要做的幾乎都是過早的優化

如果您的目標是創建哈希表,則應嘗試消除可能使特定任務變得更加復雜的所有干擾。 這樣,您應該對表中的可變值使用std :: string,這樣您就不必花費開發精力來分配和取消分配char *

一旦您的哈希表正常運行並且正確無誤,如果您有理由移至char *,則以后可以隨時更改為該表。 專注於最高優先級的目標,即哈希表,不要花時間嘗試擊敗std :: string性能,直到達到第一個目標; 在任何情況下,擊敗std :: string都不值得。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM