0

マップでキーを検索し、メッセージで返し、見つかったキーの値を取得して、別のメッセージで返す方法を見つけようとしています。たとえば、以下のクラスには食料品店で見つかった果物のリストがあり、if than elseステートメントを作成して、マップで果物の名前を見つけ、以下のメッセージでその名前を返し、別の出力でその価格を返します。 。これどうやってするの?

`

#include <iostream>
#include <string>
#include <set>
#include <map>
#include<utility>
using namespace std;



int main()
{

map<string,double> items;
items["apples"] = 1.56;
items["oranges"] = 2.34;
items["bananas"] = 3.00; 
items["limes"] = 4.45;       
items["grapefruits"] = 6.00;    

string fruit = "apples";

//If a fruit is in map
cout << "Your fruit is: " << "(fruitname value here)"
    <<"\n";
    << "your price is: " <<"(fruitname price here)" 
    << "\n";
 // return the fruitname and its price





  return 0;
}

これまでのところ、マップ全体を印刷する方法を示す例しか見ていません。私が見た中で最も近いのは、このリンクに投稿されたものです(2番目の投稿を参照):マップc ++にキーがあるかどうかを確認しますが、構文、特に「buf.c_str()」に混乱しています。

4

3 に答える 3

2

マップのキーは であるため、std::stringを使用する必要はありません.c_str()std::stringオブジェクト自体を渡すことができます:

auto it = items.find(fruit); //don't pass fruit.c_str()
if ( it != items.end())
   std::cout << "value = " << it-second << std::endl;
else
   std::cout << ("key '" + fruit + "' not found in the map") << std::endl;
于 2013-02-22T20:22:46.383 に答える
1

非常に簡単:

auto it = items.find(fruit);

if (it != items.end())
{
    std::cout << "Your fruit is " << it->first << " at price " << it->second ".\n";
}
else
{ 
    std::cout << "No fruit '" << fruit << "' exists.\n";
}
于 2013-02-22T20:22:15.750 に答える
1

mapsfindメンバー関数を使用します。

map<string,double>::const_iterator i = items.find(fruit);
if(i != items.end())
    cout << "Your fruit is: " << i->first << "\n" << "your price is: " << i->second << "\n";
于 2013-02-22T20:22:18.893 に答える