我有一個基本函數來檢查這個單詞是否是一個鍵。問題是我的try catch塊總是捕獲一個out_of_range異常,即使密鑰存在。這個問題只發生在我的isExclusion函數中。如果我使用靜態字符串檢查isExclusion函數的外部,那麼at不會拋出異常。std :: map函數總是拋出異常
此外,有沒有更好或更有效的方法來檢查密鑰是否存在?我寧願不必遍歷鍵列表。
#ifndef TITLES_H_
#define TITLES_H_
#include <algorithm>
#include <string>
#include <vector>
#include <map>
static std::map<std::string, int> exclusions;
static std::vector<std::string> titles;
bool isExclusion(std::string word);
#endif
#include "titles.h"
#include <iostream>
bool isExclusion(std::string word)
{
try
{
exclusions.at(word);
}
catch (std::out_of_range e)
{
return false;
}
return true;
}
#include <iostream>
#include "titles.h"
int main()
{
exclusions["is"] = 1;
exclusions["the"] = 1;
exclusions["of"] = 1;
exclusions["and"] = 1;
exclusions["a"] = 1;
exclusions["but"] = 1;
exclusions["as"] = 1;
titles.push_back("Descent of Man");
titles.push_back("The Ascent of Man");
titles.push_back("The Old Man and The Sea");
titles.push_back("A Portrait of the Artist As a Young Man");
titles.push_back("A Man is a Man but Bubblesort IS A DOG");
std::sort(titles.begin(), titles.end());
try
{
exclusions.at("the");
}
catch(std::out_of_range e)
{
std::cout << "Not found\n";
}
std::cout << "Exclusion?: " << isExclusion("hello") << std::endl;
std::cout << "Exclusion?: " << isExclusion("the") << std::endl;
for(auto i = titles.begin(); i != titles.end(); i++)
{
std::cout << *i << "\n";
}
return 0;
}
我忘了補充我有標誌-lm -lcrypt -02 -std = C++ 11 -pipe -DONLINE_JUDGE – Taztingo
是在最後兩個街區的一部分同一個文件? – Nabla
不,他們在單獨的文件。 – Taztingo