স্ট্যান্ড :: ম্যাপের বর্ধিত ইনিশিয়ালাইজারের তালিকাটি কেমন হবে?


94

এমনকি যদি এটি বিদ্যমান থাকে তবে একটি std::mapবর্ধিত প্রাথমিকের তালিকাটি দেখতে কেমন হবে?

আমি জিসিসি ৪.৪ দিয়ে যা ভাবতে পারি তার সবগুলি সমন্বয় চেষ্টা করেছি ... তবে সংকলিত কিছুই পাই নি

উত্তর:


150

এটি বিদ্যমান এবং ভাল কাজ করে:

std::map <int, std::string>  x
  {
    std::make_pair (42, "foo"),
    std::make_pair (3, "bar")
  };

মনে রাখবেন যে মানচিত্রের মান ধরণের pair <const key_type, mapped_type>, তাই মূলত আপনার একই বা রূপান্তরিত প্রকারের জোড়াগুলির একটি তালিকা প্রয়োজন।

স্টাড :: জোড়ের সাথে একীভূত সূচনা সহ কোডটি আরও সহজ হয়ে যায়

std::map <int, std::string> x { 
  { 42, "foo" }, 
  { 3, "bar" } 
};

4
দুর্দান্ত, এটি এটিকে স্টাইলওয়ালা খুব সুন্দর করে তোলে। আমি সম্ভবত এমসভিসি 2010 এর জন্য "ড্রপ" সমর্থনটি জিসিসির মাধ্যমে এটি ব্যবহার করতে সক্ষম হতে :) :) :)
রুবেনবিবি

4
আপনার সংকলকটি আধুনিক সি ++ সমর্থন করে তা নিশ্চিত করুন , কারণ map( std::initializer_list<value_type> init, const Compare& comp = Compare(), const Allocator& alloc = Allocator() );এটি সি ++ 11map( std::initializer_list<value_type> init, const Allocator& ); থেকে উপলব্ধ এবং কেবল সি ++ 14 এর পরে উপলব্ধ । তথ্যসূত্র:
স্ট্যান্ড

2

আমি দ্বিগুণের উত্তরে যুক্ত করতে চাই যে তালিকা সূচনাটি নেস্টেড মানচিত্রের জন্যও কাজ করে। উদাহরণস্বরূপ, মানগুলির std::mapসাথে যদি আপনার কিছু থাকে std::map, তবে আপনি নিম্নলিখিত পদ্ধতিতে এটি সূচনা করতে পারেন (কেবল আপনি কোঁকড়ানো ধনুর্বন্ধনীতে ডুবে না তা নিশ্চিত করুন):

int main() {
    std::map<int, std::map<std::string, double>> myMap{
        {1, {{"a", 1.0}, {"b", 2.0}}}, {3, {{"c", 3.0}, {"d", 4.0}, {"e", 5.0}}}
    };

    // C++17: Range-based for loops with structured binding.
    for (auto const &[k1, v1] : myMap) {
        std::cout << k1 << " =>";
        for (auto const &[k2, v2] : v1)            
            std::cout << " " << k2 << "->" << v2;
        std::cout << std::endl;
    }

    return 0;
}

আউটপুট:

1 => এ-> 1 বি-> 2
3 => সি-> 3 ডি-> 4 ই-> 5

কলিরুতে কোড

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