সি ++ মানচিত্রের মাধ্যমে লুপ করুন


216

আমি এর প্রতিটি map<string, int>স্ট্রিং-ইন মান বা কীগুলি না জেনে প্রতিটি উপাদান দিয়ে পুনরাবৃত্তি করতে চাই ।

আমার এখন পর্যন্ত যা আছে:

void output(map<string, int> table)
{
       map<string, int>::iterator it;
       for (it = table.begin(); it != table.end(); it++)
       {
            //How do I access each element?  
       }
}

উত্তর:


489

আপনি নিম্নলিখিত হিসাবে এটি অর্জন করতে পারেন:

map<string, int>::iterator it;

for ( it = symbolTable.begin(); it != symbolTable.end(); it++ )
{
    std::cout << it->first  // string (key)
              << ':'
              << it->second   // string's value 
              << std::endl ;
}

সঙ্গে সি ++ 11 (এবং অগ্রে) ,

for (auto const& x : symbolTable)
{
    std::cout << x.first  // string (key)
              << ':' 
              << x.second // string's value 
              << std::endl ;
}

সঙ্গে সি ++ 17 (এবং অগ্রে) ,

for( auto const& [key, val] : symbolTable )
{
    std::cout << key         // string (key)
              << ':'  
              << val        // string's value
              << std::endl ;
}

7
"এটি" এর সামনে "অটো" টাইপ যুক্ত করুন
আইডোক

2
@ P0W কেন সি ++ 11 এর জন্য "অটো কনস্ট এবং" তবে সি ++ 17 এর জন্য "কনস্টেন্ট অটো এবং"? "অটো কনস্ট &" এবং "কনস্ট অটো এবং" এর মধ্যে কোনও পার্থক্য রয়েছে?
এরিক

35
কোনও পার্থক্য নেই, এটি কেবল স্বাদের বিষয়। তবে এটি দেখে মনে হচ্ছে @ পি 0 ডাব্লু এর স্বাদটি খুব সামঞ্জস্যপূর্ণ নয় ...
কাপিচু

15
সি ++ 17 এর সাথে আপডেট করার জন্য ধন্যবাদ, আমি auto const& [key, val] : symbolTableফর্ম্যাটটি খুঁজছিলাম !
জল

3
@ হারাম আপনাকে প্রকল্পের সেটিংসে "আইএসও সি ++ 17 স্ট্যান্ডার্ড (/ স্ট্যান্ড: সি ++ 17)" সেট করতে হবে (কনফিগারেশন প্রোপার্টি> সি / সি ++> ভাষা> সি ++ ভাষা স্ট্যান্ডার্ড)
স্বর্ডফিশ

27

নিম্নলিখিত চেষ্টা করুন

for ( const auto &p : table )
{
   std::cout << p.first << '\t' << p.second << std::endl;
} 

লুপের জন্য একটি সাধারণ ব্যবহার করে একই লেখা যেতে পারে

for ( auto it = table.begin(); it != table.end(); ++it  )
{
   std::cout << it->first << '\t' << it->second << std::endl;
} 

std::mapনিম্নলিখিত মান হিসাবে যে মান_ টাইপ সংজ্ঞায়িত করা হয় তা বিবেচনা করুন

typedef pair<const Key, T> value_type

আমার উদাহরণে এভাবে পি VALUE_TYPE করার একটি const রেফারেন্স যেখানে চাবিকাঠি std::stringও টি হয়int

এছাড়াও এটি ফাংশন হিসাবে হিসাবে ঘোষণা করা ভাল হয়

void output( const map<string, int> &table );

14

value_typeএকটি এর mapএকটি হল pairকী এবং এটা যেমন মান ধারণকারী firstএবং secondসদস্য যথাক্রমে।

map<string, int>::iterator it;
for (it = symbolTable.begin(); it != symbolTable.end(); it++)
{
    std::cout << it->first << ' ' << it->second << '\n';
}

বা C ++ 11 এর সাথে রেঞ্জ-ভিত্তিক ব্যবহার করে:

for (auto const& p : symbolTable)
{
    std::cout << p.first << ' ' << p.second << '\n';
}

7

যেমন মস্কো থেকে @ ভ্লাদ বলেছেন, নিম্নলিখিত বিষয়গুলির value_typeজন্য std::mapসংজ্ঞায়িত করা অ্যাকাউন্টটি বিবেচনা করুন :

typedef pair<const Key, T> value_type

এর অর্থ হ'ল আপনি যদি কীওয়ার্ডটি autoআরও স্পষ্ট প্রকারের নির্দিষ্টকরণের সাথে প্রতিস্থাপন করতে চান তবে আপনি এটি করতে পারেন;

for ( const pair<const string, int> &p : table ) {
   std::cout << p.first << '\t' << p.second << std::endl;
} 

autoএই ক্ষেত্রে কী অনুবাদ করবে তা কেবল বোঝার জন্য ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.