2012-01-08 33 views
0

即使您嘗試通過提供子字符串來查找,Vector查找函數也可以搜索插入的值。這是否與地圖的鍵相同?查找向量中的函數和地圖的鍵

int main() 
    { 
    vector<string> v; 
    v.push_back("text"); 
    v.push_back("[[text"); 
    v.push_back("text"); 

    for (unsigned i = 0; i < v.size(); i++) 
    { 
     if (v[i].find("[[") == 0) 
     { 
     v[i].append("]]"); 
     } 
    } 
    } 

這裏它找到「[[text]」並使其成爲[[text]]「。

我在地圖上試過了,但運行時代碼崩潰了。我使用的開發的C++

int main() 
{ 
     std::multimap<string, string> m; 
     std::multimap<string, string> intersection; 
     std::multimap<string, string>::iterator it8; 

     m.insert(pair< string, string>("4-2"," 61-7")); 
     m.insert(pair< string, string>("5-2"," 61-7")); 

    multimap<string, string>::iterator it4; 
    multimap<string, string>::iterator it5; 
    for (it4 = m.begin(); it4 !=m.end(); it4++) 
    { 
     if (m.find("5-") == 0) 
     it5=it4;  
    } 
    cout << " result of 5 search is" << (*it5).first << ", " << (*it5).second <<endl; 
    m.clear(); 
    getchar(); 

} 
+2

你從來沒有使用任何「矢量查找功能」,並且實際上不存在這樣的功能。 – 2012-01-08 17:30:26

+0

@KerrekSB ok,所以這是一個Strung查找函數或其他東西,但如果你嘗試在地圖中有一個鍵和值作爲字符串它不會獲取你找到部分字符串的結果在這裏作爲「[[[」已通過。但是,如果我們只有鑰匙,而不是鑰匙價值的概念設置爲地圖,那麼這會找到工作嗎? – Invictus 2012-01-08 17:33:18

+0

查看Wilx的答案:集合和映射具有不可變的鍵,所以你只能得到一個'const string&'給他們。 'find'仍然有效,但是'append'不起作用。 – 2012-01-08 17:34:51

回答

2

(上ideone樣品正確的代碼)

的錯誤是,這條線

if (m.find("5-") == 0) 

永遠不會成功。你可能會對此感到驚訝。 m.find("5-")搜索整個地圖尋找一個條目,其關鍵是確切等於「5」。你的鑰匙是「4-2」和「5-2」。

是否要查找其中包含子字符串「5-」?然後,你需要像

it4->first.find("5-"); // check if the key string at this entry contains "5-" 

我想你想一個循環是這樣的:

multimap<string, string>::iterator it4; 
for (it4 = m.begin(); it4 !=m.end(); it4++) 
{ 
    if (it4->first.find("5-") != string :: pos) 
      cout << " result of 5 search is" << it4->first << ", " << it4->second <<endl;  
} 

正如其他人所指出的那樣,你是感興趣的vectormap的的find方法。您對string的查找方法感興趣 - 這是完全不同的。你的問題的標題有一點誤導(無意)。

+0

感謝您的可愛解釋。對我而言,這是一個很大的錯誤,我錯過了迭代器,並開始在沒有它的地圖上搜索 – Invictus 2012-01-08 18:23:14

2

std::set<>的問題是,你不能修改其內容的地方,因爲你可能會侵犯訂購它。但是,您可以使用迭代器(而不是operator[])從set.begin()重複爲set.end(),並刪除並重新插入修改的元素。

+0

感謝您的建議。但是,如果我傳遞了我的元素的部分字符串,它將能夠在矢量的情況下找到它。那麼我可以在那種情況下存儲該迭代器並刪除它或我想要做的任何操作 – Invictus 2012-01-08 17:35:53

+0

這樣的東西 (it4 = m.begin(); it4!= m.end(); it4 ++) { if(m.find(「5」)== 0) it5 = it4; } – Invictus 2012-01-08 17:37:31

+0

任何建議先生? – Invictus 2012-01-08 17:51:10