first commit
This commit is contained in:
145
extern/stdcxx/4.2.1/examples/tutorial/tele.cpp
vendored
Normal file
145
extern/stdcxx/4.2.1/examples/tutorial/tele.cpp
vendored
Normal file
@@ -0,0 +1,145 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* tele.cpp - Telephone directory sample program.
|
||||
*
|
||||
* $Id: tele.cpp 550991 2007-06-26 23:58:07Z sebor $
|
||||
*
|
||||
***************************************************************************
|
||||
*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed
|
||||
* with this work for additional information regarding copyright
|
||||
* ownership. The ASF licenses this file to you under the Apache
|
||||
* License, Version 2.0 (the "License"); you may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of
|
||||
* the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
* implied. See the License for the specific language governing
|
||||
* permissions and limitations under the License.
|
||||
*
|
||||
* Copyright 1994-2006 Rogue Wave Software.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
#include <map>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
|
||||
#include <examples.h>
|
||||
|
||||
typedef std::map<std::string, long, std::less<std::string>,
|
||||
std::allocator<std::pair<const std::string, long> > > friendMap;
|
||||
typedef std::map<long, std::string, std::less<long>,
|
||||
std::allocator<std::pair<const long, std::string> > > sortedMap;
|
||||
|
||||
typedef friendMap::value_type entry_type;
|
||||
typedef sortedMap::value_type sorted_entry_type;
|
||||
|
||||
|
||||
void printEntry (const entry_type & entry) {
|
||||
|
||||
std::cout << entry.first << ":" << entry.second << std::endl;
|
||||
}
|
||||
|
||||
|
||||
void printSortedEntry (const sorted_entry_type & entry) {
|
||||
|
||||
std::cout << entry.first << ":" << entry.second << std::endl;
|
||||
}
|
||||
|
||||
|
||||
long prefix (const entry_type& entry) {
|
||||
return entry.second / 10000;
|
||||
}
|
||||
|
||||
|
||||
bool prefixCompare (const entry_type & a, const entry_type & b) {
|
||||
|
||||
return prefix (a) < prefix (b);
|
||||
}
|
||||
|
||||
|
||||
class checkPrefix {
|
||||
public:
|
||||
checkPrefix (long p) : testPrefix (p)
|
||||
{ }
|
||||
long testPrefix;
|
||||
bool operator () (const entry_type& entry) {
|
||||
return prefix (entry)==testPrefix;
|
||||
}
|
||||
};
|
||||
|
||||
class telephoneDirectory {
|
||||
public:
|
||||
void addEntry (std::string name, long number) {
|
||||
database[name] = number;
|
||||
}
|
||||
void remove (std::string name) {
|
||||
database.erase (name);
|
||||
}
|
||||
void update (std::string name, long number) {
|
||||
remove (name);addEntry (name, number);
|
||||
}
|
||||
void displayDatabase () {
|
||||
std::for_each (database.begin (), database.end (), printEntry);
|
||||
}
|
||||
void displayPrefix (int);
|
||||
void displayByPrefix ();
|
||||
private:
|
||||
friendMap database;
|
||||
};
|
||||
|
||||
|
||||
void telephoneDirectory::displayPrefix (int pfx) {
|
||||
|
||||
std::cout << "Listing for prefix " << pfx << std::endl;
|
||||
|
||||
friendMap::iterator
|
||||
where = std::find_if (database.begin (), database.end (),
|
||||
checkPrefix (pfx));
|
||||
while (where != database.end ()) {
|
||||
printEntry (*where);
|
||||
where = std::find_if (++where, database.end (), checkPrefix (pfx));
|
||||
}
|
||||
|
||||
std::cout << "end of prefix listing" << std::endl;
|
||||
}
|
||||
|
||||
|
||||
void telephoneDirectory::displayByPrefix () {
|
||||
|
||||
std::cout << "Display by prefix" << std::endl;
|
||||
|
||||
sortedMap sortedData;
|
||||
for (friendMap::iterator i = database.begin (); i != database.end (); i++)
|
||||
sortedData.insert (sortedMap::value_type ((*i).second, (*i).first));
|
||||
std::for_each (sortedData.begin (), sortedData.end (), printSortedEntry);
|
||||
|
||||
std::cout << "end display by prefix" << std::endl;
|
||||
}
|
||||
|
||||
|
||||
int main () {
|
||||
|
||||
std::cout << "Telephone Directory sample program" << std::endl;
|
||||
|
||||
telephoneDirectory friends;
|
||||
friends.addEntry ("Samantha", 6342343);
|
||||
friends.addEntry ("Brenda", 5436546);
|
||||
friends.addEntry ("Fred", 7435423);
|
||||
friends.addEntry ("Allen", 6348723);
|
||||
friends.displayDatabase ();
|
||||
friends.displayPrefix (634);
|
||||
friends.displayByPrefix ();
|
||||
|
||||
std::cout << "End of telephone directory sample program" << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user