Пример #1
0
size_t hash1( const std::string& s )
{
        std::string ns = s;
        makelowercase(ns);
        std::hash< std::string > str_hash;
        return str_hash(ns);   
}
Пример #2
0
Var value_compare(Var a, Var b) {
    char *sa=0, *sb=0;
    Var r;

    if(a.type != b.type) {
        r.type = TYPE_ERR;
        r.v.err = E_TYPE;
        return r;
    }

    switch(a.type) {
    case TYPE_STR:
        sa=str_dup(a.v.str);
        sb=str_dup(b.v.str);
        makelowercase(sa);
        makelowercase(sb);
        r.v.num = strcmp(sa, sb);
        free(sa);
        free(sb);
        r.type = TYPE_INT;
        break;
    case TYPE_INT:
    case TYPE_FLOAT:
        r = compare_numbers(a,b);
        break;
    case TYPE_OBJ:
    case TYPE_ERR:
        a.type = b.type = TYPE_INT;
        r = compare_numbers(a,b);
        break;
    default:
        r.v.err = E_TYPE;
        r.type = TYPE_ERR;
    }

    return r;
}
Пример #3
0
int main( int argc, char* argv [] )
{

   std::vector< std::string > vect;

   // This use of int is one of those ugly remainders of C--.

   for( int i = 1; i != argc; ++ i )
   {
      std::ifstream input{ argv[i] }; 
      if( !input )
      {
         std::cerr << "could not open input file " << argv[i] << "\n";
      }
      else
      {
         readfile( input, vect ); 
      }
   }

   makelowercase( vect );

   std::cout << vect << "\n";

   std::list< std::string > lst = makelist( vect ); 

   auto t1 = std::chrono::high_resolution_clock::now( ); 
   vectortest::sort( vect );
   //listtest::sort(lst);
   auto t2 = std::chrono::high_resolution_clock::now( );

   std::chrono::duration< double > d = ( t2 - t1 );
   std::cout << vect << "\n";

   std::cout << "sorting took " << d. count( ) << " seconds\n";
   return 0;
}
Пример #4
0
void makelowercase( std::vector< std::string > & vect )
{
   for( auto& s : vect )
      makelowercase(s);
}
Пример #5
0
int main()
{
    std::map< std::string,unsigned int > freq1;
    std::map< std::string,unsigned int > freq2;
    std::map< std::string,unsigned int > freq3;
    std::unordered_map< std::string, unsigned int > f1;
    std::unordered_map< std::string, unsigned int > f2;
    std::unordered_map< std::string, unsigned int > f3;
    std::vector< std::string > v;
    std::vector< std::string > v1;
    std::fstream file("3.html");
    readfile(file,v);
    readfile(file,v1);

    auto t11 = std::chrono::high_resolution_clock::now( );
    freq1 = frequencytable(v);
    auto t12 = std::chrono::high_resolution_clock::now( );
    f1 = hash_frequencytable(v);
    auto t13 = std::chrono::high_resolution_clock::now( );

    readfile(file,v);
    auto t21 = std::chrono::high_resolution_clock::now( );
    freq2 = frequencytable(v);
    auto t22 = std::chrono::high_resolution_clock::now( );
    f3 = hash_frequencytable(v);
    auto t23 = std::chrono::high_resolution_clock::now( );

    readfile(file,v);
    auto t31 = std::chrono::high_resolution_clock::now( );
    freq3 = frequencytable(v);
    auto t32 = std::chrono::high_resolution_clock::now( );
    f3 = hash_frequencytable(v);
    auto t33 = std::chrono::high_resolution_clock::now( );

    std::chrono::duration< double > d1 = ( t12 - t11 );
    std::chrono::duration< double > d2 = ( t22 - t21 );
    std::chrono::duration< double > d3 = ( t32 - t31 );
    std::chrono::duration< double > d4 = ( t13 - t12 );
    std::chrono::duration< double > d5 = ( t23 - t22 );
    std::chrono::duration< double > d6 = ( t33 - t32 );

    std::cout << "for map:\n 1*3.html = " << d1.count() << "\n 2*3.html = " << d2.count() << "\n 3*3.html = " << d3.count() << " seconds\n";
    std::cout << "for unordered_map:\n 1*3.html = " << d4.count() << "\n 2*3.html = " << d5.count() << "\n 3*3.html = " << d6.count() << " seconds\n";
	
auto cmp = [] ( const std::string& s1, const std::string& s2 )
{
    size_t m = s1.length() < s2.length() ? s1.length() : s2. length( );
    for(size_t i = 0;i < m; i++)
    {
        int a = tolower(s1[i]);
        int b = tolower(s2[i]);
        if(a != b) return a < b;
    }
	return s1.length() < s2.length();
};


auto hash = [] ( const std::string& s )
{
        std::string ns = s;
        makelowercase(ns);
        std::hash< std::string > str_hash;
        return str_hash(ns);   
};
auto equal = []( const std::string& s1, const std::string& s2 )
{
	if(s1.length() != s2.length()) return false;
        size_t m = s1.length() < s2.length() ? s1.length() : s2. length( );
        for(size_t i = 0;i < m; i++)
        {
            int a = tolower(s1[i]);
            int b = tolower(s2[i]);
            if(a != b) return false;
        }
        return true;
};


    auto m1 = nfrequencytable(v1, cmp);
    auto m2 = nhash_frequencytable(v1,hash,equal);
    std::cout << most_frequent(freq1);
    //std::cout << m1;
    //std::cout << m2;
    auto m3 = nfrequencytable < bool (*) ( const std::string& s1, const std::string& s2 ) > (v1,cmp1);
    auto m4 = nhash_frequencytable < size_t (*) (const std::string& s), bool (*) ( const std::string& s1, const std::string& s2 ) > (v1,hash,equal); 
    //std::cout << m3;
    //std::cout << m4;

    file.close();
    return 0;
}