c++ - স্ট্রিংয়ের জন্য set_union ব্যবহার করে
algorithm sorting (2)
আমার দুটি ভেক্টর রয়েছে, আমার তৃতীয় ভেক্টরে তাদের ইউনিয়ন প্রয়োজন (তৃতীয় ভেক্টরের আকার নির্দিষ্ট না করে)
std::vector<std::string> a = {"a","b"};
std::vector<std::string> b = {"d","c"};
std::vector<std::string> c;
std::set_union(a.begin(),a.end(),b.begin(),b.end(),c.begin());
std::cout<<c[1];
এটি কম্পাইল করে তবে একটি খালি আউটপুট দেয়।
অ্যালগরিদম
std::set_union
দরকার।
আপনার স্ট্রিংয়ের উদাহরণে প্রথম ভেক্টরকে আরোহী ক্রমে এবং দ্বিতীয়টিতে - উতরিত ক্রমে অর্ডার দেওয়া হয়।
তাছাড়া ভেক্টর
c
খালি তাই আপনি অ্যালগরিদমের ডাকে
c.begin()
এক্সপ্রেশনটি ব্যবহার করতে পারবেন না।
আপনার
std::back_insert_iterator
ব্যবহার করা দরকার।
আপনার স্ট্রিংয়ের উদাহরণের জন্য অ্যালগরিদমের কলটি নিখুঁতভাবে দেখতে পারে যেমন এটি বিক্ষোভকারী প্রোগ্রামে প্রদর্শিত হয়।
#include <iostream>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>
int main()
{
std::vector<std::string> a = { "a", "b" };
std::vector<std::string> b = { "d", "c" };
std::vector<std::string> c;
std::set_union( std::begin( a ), std::end( a ),
std::rbegin( b ), std::rend( b ),
std::back_inserter( c ) );
for ( const auto &s : c ) std::cout << s << ' ';
std::cout << '\n';
return 0;
}
এর আউটপুট হয়
a b c d
অন্যথায় আপনার ভেক্টর বাছাই করা প্রয়োজন।
আপনি যদি মূল ভেক্টরগুলিকে বাছাই না করে থাকেন তবে নীচের পদ্ধতিটি ব্যবহার করতে পারেন
#include <iostream>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>
int main()
{
std::vector<std::string> a = { "a", "b" };
std::vector<std::string> b = { "d", "c", "a" };
std::vector<std::string> c( a );
c.insert( std::end( c ), std::begin( b ), std::end( b ) );
std::sort( std::begin( c ), std::end( c ) );
c.erase( std::unique( std::begin( c ), std::end( c ) ), std::end( c ) );
for ( const auto &s : c ) std::cout << s << ' ';
std::cout << '\n';
return 0;
}
প্রোগ্রাম আউটপুট হয়
a b c d
আপনার কোডে দুটি জিনিস ভুল:
-
আপনি
std::set_union
এর প্রয়োজনীয়তাগুলি পড়েনstd::set_union
- প্রদত্ত তুলনা ফাংশন অনুযায়ী ইনপুট রেঞ্জগুলি বাছাই করতে হবে (আপনার ক্ষেত্রেoperator<
আপনার ক্ষেত্রে) - এটিstd::set_union
জন্য ধারণ করে না। -
অ্যালগরিদম
c.begin()
মাধ্যমেc.begin()
আকার পরিবর্তন করতে পারে না; এটি খালি থাকে এবং আপনি সীমা ছাড়াই লিখেন।std::back_insert_iterator
ব্যবহার করুন।