C++ 由双默认构造函数在c++;

C++ 由双默认构造函数在c++;,c++,double,C++,Double,我有一个变量: std::地图课程 如果为某个键指定了值,我想打印它。所以我的键是字符串,所以我想要这样的东西: std::cin >> mystring; if (!(courses[mystring] == x)) std::cout << courses[mystring] << std::endl; if( courses.count( mystring ) ) { cout << courses[mystring] <&

我有一个变量:
std::地图课程

如果为某个键指定了值,我想打印它。所以我的键是字符串,所以我想要这样的东西:

std::cin >> mystring;
if (!(courses[mystring] == x)) std::cout << courses[mystring] << std::endl;
if( courses.count( mystring ) )
{
    cout << courses[mystring]  << endl;
}
std::cin>>mystring;

如果(!(courses[mystring]==x))std::cout您只需执行
课程。查找(mystring)!=courses.end()

std::map<std::string, double>::iterator iter = courses.find(mystring);
if ( iter != courses.end() )
{
  std::cout << iter->second << std::endl;
}

具有代码更简单的优点。然而,这可能要付出代价。您可能需要搜索该项目两次。

使用以下方法

auto it = courses.find( mystring );

if ( it != courses.end() ) std::cout << it->second << std::endl; 
甚至写作也会更好

if ( courses.count( mystring ) != 0 ) std::cout << courses[mystring]  << std::endl; 
if(courses.count(mystring)!=0)std::cout
if(courses.count(mystring))
{

数值类型的默认构造函数给出0.Hmmm,如果(!(courses[mystring]==0))则这样做
将是一个解决方案。很遗憾,没有,因为值0实际上可能存储在MySnpe的映射中。@ CaspjimJi:这里没有索引使用。这就是我所想的。似乎<>代码>查找/代码>建议将是走的路。@ DLF:在这种情况下,C++方式是使用迭代器。@ Stasxx:从什么时候开始不需要的?XeTeY变成了“C++方式”。@阿尔夫。我不打算在这里讨论。也许是在聊天中。但是这里有一个问题2008,有一些很好的答案:@ Stistx:所选的“解决方案”。对于这个问题,谈论
std::list
的索引,好像这样做的代码可能效率低下,这是一个很好的例子,例如Herb Schildt land。除此之外,我看不出与您的断言有任何关联。这可能看起来更简单,但对我来说,find似乎更直观:)@staticx它需要定义一个迭代器。因此代码与find更为复杂。使用count只能编写一行代码,如我的帖子中的示例所示。
return courses.find(mystring)!=courses.end()“StAcdix”在这里是不清楚的,为什么你试图得到方法查找返回的迭代器。如果你不知道C++程序员为什么会发现find的结果等于“代码>结尾< /代码>,那么我同意你的观点。但是如果你不理解,那么你可能需要更多的训练。这对已经存在的东西有什么帮助?发布了吗?这实际上是一个重复的答案。@staticx这个答案很简单,所以我想很多人都在同时写。如果我没有注意到Luchian(当时)的话,我还会有另一个重复的答案在我单击“提交”之前就有了新答案。@staticx我同意你的看法。这是实时回答SO问题的一个不幸的副作用。我们同时开始键入答案,由于各种原因,答案以不同的顺序显示。我向你保证我没有复制任何答案。我不会投反对票,但如果你同意,那就太好了可以添加更多内容来区分您自己。对于“您必须搜索该项两次”,映射实现可以自由地存储最后找到的迭代器值作为下次搜索的提示,并将其减少到O(1)在这种情况下,例如,查看的复杂性。仅此一项就将这种优化考虑归类为过早,此外,在一个小集合中,i/o和搜索之间存在数量级的差异,更不用说基于迭代器的代码的复杂性(加法变量)和冗长性了。
if ( courses.count( mystring ) != 0 ) std::cout << courses[mystring]  << std::endl; 
if( courses.count( mystring ) )
{
    cout << courses[mystring]  << endl;
}