string和char數組的區別是什麼以及map可否設置key為char數組?

如題,感覺用map的時候key和value都設置成string的時候插入char會出問題,還有所有字元串函數比如strcmp不能用在string身上


string操作請使用迭代器和#include &,不要再去想什麼strcmp了。還有map的key是不能修改的,你要麼erase要麼insert。


搞不懂為啥方便的string不用,非要用char[]?

是strcmp方便還是直接==方便?


一般盡量都用string,如果某些特殊需要非要用char*做map,也是可以的,自己寫比較函數。

下面是直接增加std命名空間下面的equal_to支持的參數類型,這樣寫的好處是,不用顯示的在map定義的時候寫比較函數,還可以被同類STL類使用,比如hash_map、set等等。

#include &
#include &
#include &

namespace std
{
template &<&>
struct equal_to& : binary_function&
{
bool operator()(const char* a, const char* b) const { return strcmp(a, b) == 0; }
};

template &<&>
struct equal_to& : binary_function&
{
bool operator()(const char* a, const char* b) const { return strcmp(a, b) == 0; }
};
}

using namespace std;

static const char* g_List[][2] =
{
{ "這是key", "這是value" }
};

int main() {
map& CharsMap;
CharsMap.insert(pair&(g_List[0][0], g_List[0][1]));
map&::const_iterator it;
it = CharsMap.find("這是key");
if (it != CharsMap.end())
{
cout &<&< it-&>second &<&< endl; } return 0; }


要學C++,不要學C.

用了include&<中&>後.

什麼都不用擔憂了.

哪有這麼多英文煩死人.


千萬不要二者混用,別的都不說了,char和string混著用你自己用著難道不累么?


可以用字元數組做key,不過要提供相應的less運算。

只有在所有key的長度都相同時,才應該考慮用過字元數組。

推薦用std::array&代替char[N]。


題主認真學習過了嗎,還不明白cpp的宗旨。要用strcmp就用char數組,要方便就用string,強行用就strcmp(str1.c_str(),str2.c_str())


推薦閱讀:

为什么ASCII被摆放成现在这个样子?——我指的是各个ASCII字符的编号顺序
如何評價 ScyllaDB?
c++primer和more effective c++的一處矛盾?
如何判斷CTP的行情線程是否阻塞?
Qt 重繪問題?

TAG:演算法 | C | 標準庫 | string |